springMVC参数顺序不同导致异常

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参数可能必须放在最后

系统执行发生错误,信息描述如下:

 

错误状态代码是:500

 

错误发生页面是:/springtest/login/registUser

 

异常是:java.lang.IllegalStateException: An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply: public java.lang.String com.cmcc.foura.login.action.LoginAction.registUser(org.springframework.web.servlet.mvc.support.RedirectAttributes,org.springframework.validation.BindingResult,com.cmcc.foura.login.domain.User)

 

错误信息:java.lang.IllegalStateException: An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply: public java.lang.String com.cmcc.foura.login.action.LoginAction.registUser(org.springframework.web.servlet.mvc.support.RedirectAttributes,org.springframework.validation.BindingResult,com.cmcc.foura.login.domain.User)

 

发生错误时request中的参数:
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有深刻了解的童鞋能够解答吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值