Java 如何在表单对象上重新运行Bean验证?(Spring 4 MVC控制器)

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

我有一个用JSR-303注释的简单模型

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
,效果很好。