今天早上看到一个问题:http://www.iteye.com/problems/95447
@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://
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方法中:
Object arg = resolveName(namedValueInfo.name, parameter, webRequest); if (arg == null) { if (namedValueInfo.defaultValue != null) { arg = resolveDefaultValue(namedValueInfo.defaultValue); } else if (namedValueInfo.required) { handleMissingValue(namedValueInfo.name, parameter); } arg = handleNullValue(namedValueInfo.name, arg, paramType); } else if ("".equals(arg) && (namedValueInfo.defaultValue != null)) { arg = resolveDefaultValue(namedValueInfo.defaultValue); } 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); } handleResolvedValue(arg, namedValueInfo.name, parameter, mavContainer, webRequest); return arg;
多添加了如下代码来处理null的情况,而handleMissingValue默认是抛异常的:
if (emptyArgValue && (arg == null)) { handleMissingValue(namedValueInfo.name, parameter); }
但是如果之前版本就不处理此情况。
所以综上,不管你是不是有如下代码参数都是必须的。。。
@RequestParam(value="username", required=false)
这是个bug。。提交了其jira
https://jira.springsource.org/browse/SPR-10592
相关推荐
Spring3.2.3最少的类包,不包含AOP等功能的类包,适合Spring初学者
Jersey2.13+spring3.2.3入门实例,包含源码及tomcat webapp. 运行环境: myeclipse10.6 tomcat7.0+jdk1.7
本人搭建的最新ssm框架,包括c3p0连接池、全注解、AOP日志管理、mybatis拦截器物理分页、文件上传等功能。依旧保持最小jar包,只有20个,本人讨厌滥用jar包。
Struts2 2.3.15 + Hibernate 3.x.x + Spring 3.2.3整合JAR包
spring-3.2.3.RELEASE.rar 核心包
一个实例小工程,讲解的是将hibernate的sessionFactory交给spring管理的配置方法
包括libsvm包,官方指南和编译器 LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了...
NULL 博文链接:https://elfasd.iteye.com/blog/1908001
spring3.2.3zip,包括jar包等文件
spring-framework-3.2.3.RELEASE
spring mvc3.2.3+ myibatis3.2.2 分 dao service pojo mapper controllor等层,有敢于网上下载多不适用,故作一层次分明功能较全面(列表,登录验证,增加)的功能验证性web程序以为分享,因程序为功能验证性程序,...
自己整合的SSH框架包,只要把所有的包都粘贴在lib下就可以使用,希望可以帮到大家
...
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架
spring-tx-3.2.3.RELEASE.jar 包
Spring整合Junit测试时所需要的jar包。 spring-test-3.2.3.RELEASE.jar
从完整包中 抽出最少的包然后 编写一个增删改功能进行框架测试
spring 3.2.3 参考文档这个版本在官网上文档都很难找,但是有归档的地址 大家不要下这个,可以到官网下载,我这里就是存一下档https://docs.spring.io/spring/docs/3.2.3.RELEASE/spring-framework-reference/html/
spring-web-3.2.3.RELEASE.jar。。。。。。。。。。。