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