@Valid的spring验证

我正在验证传入属性,但是验证器甚至捕获了其他未注释的页面 @Valid

 @RequestMapping(value = "/showMatches.spr", method = RequestMethod.GET)

public ModelAndView showMatchPage(@ModelAttribute IdCommand idCommand)

//etc

当我访问页面时/showMatches.spr,出现错误`org.springframework.web.util.NestedServletException:

Request processing failed; nested exception is

java.lang.IllegalStateException: Invalid target for Validator

cz.domain.controller.IdCommand@486c1af3`,

验证器不接受它,但是我不希望它进行验证!通过此验证器:

 protected void initBinder(WebDataBinder binder) {

binder.setValidator(new Validator() {

// etc.

}

回答:

Spring不会验证您的IdCommand,但WebDataBinder不允许您设置一个不接受绑定的bean的验证器。

如果使用@InitBinder,则可以显式指定每个模型属性所绑定的名称WebDataBinder(否则,您的initBinder()方法将应用于所有属性),如下所示:

@RequestMapping(...)

public ModelAndView showMatchPage(@ModelAttribute IdCommand idCommand) { ... }

@InitBinder("idCommand")

protected void initIdCommandBinder(WebDataBinder binder) {

// no setValidator here, or no method at all if not needed

...

}

@RequestMapping(...)

public ModelAndView saveFoo(@ModelAttribute @Valid Foo foo) { ... }

@InitBinder("foo")

protected void initFooBinder(WebDataBinder binder) {

binder.setValidator(...);

}

以上是 @Valid的spring验证 的全部内容, 来源链接: utcz.com/qa/403461.html

回到顶部