本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
提问:Spring Web MVC如何验证单个请求参数 ?
我在Spring Web MVC 3.0中运行一个webapp,我有许多controller方法,其签名大致如下:
@RequestMapping(value = "/{level1}/{level2}/foo", method = RequestMethod.POST)
public ModelAndView createFoo(@PathVariable long level1,
@PathVariable long level2,
@RequestParam("foo_name") String fooname,
@RequestParam(value = "description", required = false) String description);
我想添加一些验证-例如,description应限制为一定长度或fooname仅包含某些字符。如果此验证失败,则我想向用户返回一条消息,而不仅仅是抛出一些未经检查的异常(如果我让数据渗透到DAO层,无论如何都会发生这种情况)。我知道JSR303,但尚未使用它,也不太了解如何在Spring上下文中应用它。
据我了解,另一种选择是将绑定@RequestBody到整个域对象并在其中添加验证约束,但是目前我的代码已设置为接受单个参数,如上所示。
将验证应用于输入参数的最直接方法是什么?
回答1:
到目前为止,还没有内置任何功能可以做到这一点。 在当前发行版中,如果要进行自动验证,则仍将需要使用WebDataBinder将参数绑定到对象上。
public ModelAndView createFoo(@PathVariable long level1,
@PathVariable long level2,
@Valid @ModelAttribute() FooWrapper fooWrapper,
BindingResult errors) {
if (errors.hasErrors() {
//handle errors, can just return if using Spring form:error tags.
}
}
public static class FooWrapper {
@NotNull
@Size(max=32)
private String fooName;
private String description;
//getset
}
如果您在类路径上具有Hibernate Validator 4或更高版本,并使用默认的调度程序设置,则它应该“正常工作”。