spring版本:3.2.4
hibernate-validator版本:4.2.0
我做了一个简单测试:注册用户时,不考虑js验证,利用hibernate-validator在Controller中进行验证属性为空时的错误
Domain对象User代码如下:
public class User {
@NotEmpty
private String userName;//验证userName为空是否出现验证错误
private String password;
..setter/getter
}
Controller对象代码如下:
@RequestMapping(value = "/registUser")
public String registUser(RedirectAttributes flashAttr, //redirect跳转时候传递参数的方式
@Valid User user, //对jsp页面传递过来的User对象验证是否userName为空
BindingResult result) {
System.out.println("是否验证出错:" + result.hasErrors());
flashAttr.addFlashAttribute("currentUser", user);
return "redirect:/login/registSuccess";//注册用户成功跳转至另一个controller
}
看到了吧,这样的参数顺序是绝对没有问题的,当前台传递空userName的时候打印错误是true
变动1:当我把参数顺序变为:@Valid User user, RedirectAttributes flashAttr,BindingResult result的时候,异常出现了,如下:
HTTP Status 400 -
type Status report
message
description The request sent by the client was syntactically incorrect ().
Apache Tomcat/6.0.32
变动2:当我把参数顺序变为: RedirectAttributes flashAttr,BindingResult result,@Valid User user的时候,异常出现了,如下:
内容是我自定义500页面显示出来的,显示是500错误,说明BindingResult result参数可能必须放在最后
password=111
userName=
错误堆栈信息:
org.springframework.web.method.annotation.ErrorsMethodArgumentResolver.resolveArgument(ErrorsMethodArgumentResolver.java:62) org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:123) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
以上就是我简单调整了参数顺序得到的不同的结果,有对springMVC有深刻了解的童鞋能够解答吗?