Java 如何在表单对象上重新运行Bean验证?(Spring 4 MVC控制器)
我有一个用JSR-303注释的简单模型Java 如何在表单对象上重新运行Bean验证?(Spring 4 MVC控制器),java,spring,spring-mvc,bean-validation,Java,Spring,Spring Mvc,Bean Validation,我有一个用JSR-303注释的简单模型 public class Article { ... @NotNull private String tag; ... } 标记字段未暴露在表单中,而是填充在控制器的方法中 public class ArticleController { ... @RequestMapping(value = "/edit", method = PUT) public String doEdit(@Valid @Mode
public class Article {
...
@NotNull
private String tag;
...
}
标记
字段未暴露在表单中,而是填充在控制器的方法中
public class ArticleController {
...
@RequestMapping(value = "/edit", method = PUT)
public String doEdit(@Valid @ModelAttribute("article") final Article article,
final BindingResult bindingResult) {
// generates article's tag, not editable by user
article.setTag(generateTag(article));
if (bindingResult.hasErrors()) {
return "/edit";
} else {
service.save(article);
return "redirect:/list";
}
}
现在,bindingResult
在tag
字段上始终没有空错误,因为bean在设置之前已经过验证。设置标记
字段并填充正确的绑定结果
后,如何重新验证文章bean?尝试
public class ArticleController {
// inject the spring validator.
@Autowired
private LocalValidatorFactoryBean validator;
@RequestMapping(value = "/edit", method = PUT)
public String doEdit(@ModelAttribute("article") final Article article,
final BindingResult bindingResult) {
// generates article's tag, not editable by user
article.setTag(generateTag(article));
// validate
validator.validate(article, bindingResult);
if (bindingResult.hasErrors()) {
return "/edit";
} else {
service.save(article);
return "redirect:/list";
}
}
}
谢谢你的主意。顺便说一句,我注入了
org.springframework.validation.Validator
而不是localvalidatoryfactorybean
,效果很好。