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

2013/07/28 11:19
阅读数 205
AI总结

转自: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)

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
AI总结
返回顶部
顶部