[转]Spring3.2.3在绑定参数时的一点小变化

转自:http://www.360doc.com/content/13/0528/10/11947209_288730154.shtml

Java代码 收藏代码
@Controller
public class ExampleController {

@RequestMapping("/index")  
public String index(Long id) {  
    System.out.println(id);  
    return "index";  
}  

}
使用spring3.2.3时,在浏览器输入:http://localhost/index?id= 会报如下错误:

写道
HTTP ERROR 400

Problem accessing /es-web/monitor. Reason:

Required Long parameter 'userId' is not present
Powered by Jetty://
而spring3.2.3之前的版本是没有问题的。

spring3.2.3做了点小改变:
在其org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver的resolveArgument方法中:
Java代码 收藏代码
boolean emptyArgValue = ““.equals(arg);

if (binderFactory != null) {

WebDataBinder binder = binderFactory.createBinder(webRequest, null, namedValueInfo.name);  
arg = binder.convertIfNecessary(arg, paramType, parameter);  

}

if (emptyArgValue && (arg == null)) {

handleMissingValue(namedValueInfo.name, parameter);  

}
多添加了如下代码来处理null的情况,而handleMissingValue默认是抛异常的:
Java代码 收藏代码
if (emptyArgValue && (arg == null)) {
handleMissingValue(namedValueInfo.name, parameter);
}
但是如果之前版本就不处理此情况。

所以综上,我们应该使用如下代码来处理可选参数:
@RequestParam(value=“username”, required=false)

你可能感兴趣的:([转]Spring3.2.3在绑定参数时的一点小变化)