2011-07-30 118 views
3

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

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

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

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

回答

0

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

如果添加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 
} 
+0

这就是我试图避免的。我不想要或需要另一个成形后物体。 –

+0

啊,好的。然后,我没有看到'BindingResult'(和内部使用的'DataBinder')的动机,因为它们仅适用于绑定请求数据以形成/命令对象。如果你尝试检查单个'@ RequestParam'值(例如原语或字符串),你可以使用一个方面预先填充一个自定义的'BindingResult',或者写一个特定的'HandlerInterceptor',对请求参数执行额外的动作命中控制器。 –

+1

我想使用BindingResult的原因是它处理错误信息和i18n。现在我只做了另一个转移对象。 –