【问题标题】:Validating @RequestParam in Spring 3 MVC在 Spring 3 MVC 中验证 @RequestParam
【发布时间】:2011-07-30 13:03:10
【问题描述】:

如何验证 Spring @RequestParam 以便它们在 BindingResult 中而不必使用某种 POJO 传输对象 (@ModelAttribute)?

我可以使用 MapBindingResult 并将请求参数放入其中,但我必须将该绑定结果放入模型中。

我可以用 org.springframework.validation.BindingResult.MODEL_KEY_PREFIX + name 来做。

有没有更好的方法来绑定和验证请求参数(而不是制作另一个 POJO)?

【问题讨论】:

    标签: java spring validation data-binding spring-mvc


    【解决方案1】:

    如果您使用的是 Spring MVC 3.0 或更高版本,则可以使用 Spring 提供的declarative validation support。然后,您将声明模型 bean 的验证限制,并将 @Valid 注释添加到您的表单支持 bean,如参考文档中的 "Spring Validation" 章节所述。

    如果您在验证 bean 之后直接添加 BindingResult 参数,则可以检查控制器中的验证错误:

    // .. in the bean class
    public class MyBean {
        @NotNull
        private String name;
        // ..
    }
    
    // .. in the @Controller
    public ModelAndView doSomething(@Valid MyBean data, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) { 
            // back to form
        }
        // do something with the bean
    }
    

    【讨论】:

    • 这就是我要避免的。我不想要或不需要另一个正在形成的对象。
    • 啊,好吧。然后我看不到BindingResult(以及内部使用的DataBinder)的动机,因为它们仅适用于将请求数据绑定到表单/命令对象。如果您尝试检查单个 @RequestParam 值(例如原语或字符串),您可以使用方面来预填充自定义 BindingResult 或者编写特定的 HandlerInterceptor 在请求参数命中之前执行附加操作控制器。
    • 我想使用 BindingResult 的原因是它处理错误消息和 i18n。现在我刚刚制作了另一个传输对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2016-08-17
    • 2013-05-08
    相关资源
    最近更新 更多