java - 如何在表单对象上重新运行 Bean 验证? (Spring 4 MVC Controller )

标签 java spring spring-mvc bean-validation

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

public class Article {
    ...
    @NotNull
    private String tag;
    ...
}

tag 字段不会暴露在表单中,而是填充在 Controller 的方法中

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";
    }
}

现在 bindingResulttag 字段上始终没有 null 错误,因为 bean 在设置之前进行了验证。在设置 tag 归档并填充正确的 bindingResult 后,如何重新验证文章 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";
        }
    }
}

关于java - 如何在表单对象上重新运行 Bean 验证? (Spring 4 MVC Controller ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23701279/

相关文章:

java - 使用 Fragment 类中的数据库填充 android ListView 时发生意外错误

java - Jquery 验证后表单未提交

java - 是否有一种通用方法来验证(基于 xml 的)spring 配置是否有效?

java - 如何配置 EclipseLink 2.0 和 Spring 3.0.5 以及 Tomcat 6?

java - spring mvc 防止直接访问方法

java - Spring MVC Controller 方法的有效返回类型是什么?

java - 在 Spring Controller 类中使用具有静态方法的类的 Bean 定义

java - Junit 5 无法解析方法的参数

java - Mac 上的 Sencha Cmd 安装 : Java not found

java - 什么是NullPointerException,我该如何解决?