`
jinnianshilongnian
  • 浏览: 21504243 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2418709
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3008826
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5639511
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:259935
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1597339
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250226
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5858973
Group-logo
跟我学Nginx+Lua开...
浏览量:702014
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:785230
社区版块
存档分类
最新评论

Spring3.2.3 绑定参数bug

 
阅读更多

今天早上看到一个问题: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://

而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

 

8
4
分享到:
评论
4 楼 jinnianshilongnian 2013-05-28  
arong 写道
想简洁点还不行了

这是个bug
3 楼 jinnianshilongnian 2013-05-28  
lanhuidong 写道
你测试过@RequestParam(value="username", required=false)吗?我这边怎么还是一样的错误?

sorry 这是个bug。。。
2 楼 lanhuidong 2013-05-28  
你测试过@RequestParam(value="username", required=false)吗?我这边怎么还是一样的错误?
1 楼 arong 2013-05-28  
想简洁点还不行了

相关推荐

    spring mvc + spring3.2.3 + mybatis3.2.3 + oracle

    SSM框架是Spring MVC、Spring 3.2.3和MyBatis 3.2.3集成的常用Java Web开发框架,它为开发者提供了一种高效、灵活的后端架构解决方案。下面将详细介绍这些组件以及如何在Oracle数据库环境下进行集成。 **Spring MVC...

    spring-3.2.3.RELEASE.rar

    8. **性能和稳定性提升**:Spring 3.2.3对许多内部组件进行了优化,提高了整体性能,同时修复了大量的bug,增强了系统的稳定性和可靠性。 9. **注解驱动的开发**:3.2.3版本进一步推广了注解的使用,如@Component、...

    Spring3.2.3+Quartz2.2 整合配置

    本篇文章将详细介绍如何将Spring 3.2.3版本与Quartz 2.2版本进行整合配置,以便在Spring应用中实现灵活的定时任务管理。 首先,集成Quartz到Spring项目中,我们需要在项目的`pom.xml`或`build.gradle`文件中添加...

    Jersey2.13+spring3.2.3入门实例

    ** Jersey2.13 + Spring3.2.3入门实例详解** 本文将深入探讨如何结合Jersey 2.13和Spring 3.2.3框架构建一个入门级的Web服务应用。首先,我们来了解这两个关键组件的核心功能。 **Jersey** 是Java语言中最流行的...

    Spring3.2.3基础类包

    Spring3.2.3基础类包是专门为初学者设计的,它包含了Spring框架最基本、最核心的部分,不包括额外的模块如AOP(面向切面编程)等高级功能。这样的设计使得学习者能够更专注于理解和掌握Spring的核心概念,避免在学习...

    spring配置sessionFactory(spring3.2.3+hibernate4.2.2)

    本文将详细讲解如何在Spring 3.2.3版本中配置SessionFactory,以便整合Hibernate 4.2.2,实现对数据库操作的高效管理。SessionFactory是Hibernate的核心组件,它负责创建Session对象,而Session则是与数据库交互的...

    三、Spring3.2.3+Hibernate4.2项目框架搭建.pdf

    【Spring3.2.3+Hibernate4.2项目框架搭建】是关于构建基于Spring和Hibernate的Web应用程序的教程。在该框架中,Spring作为依赖注入容器和应用上下文管理工具,而Hibernate则作为对象关系映射(ORM)框架,负责数据库...

    hibernate3.3 struts-2.3.20 spring3.2.3 整合框架

    这个"hibernate3.3 struts-2.3.20 spring3.2.3 整合框架"压缩包包含了这三个框架的特定版本,适用于旧项目的开发或者学习。开发者只需将所有库文件复制到项目的lib目录下,然后按照SSH的整合教程配置相应的XML文件,...

    这是第一个专门针对SSH框架的课程设计,使用Struts 2.3.4.1+Spring 3.2.3+Hib

    这是第一个专门针对SSH框架的课程设计,使用Struts 2.3.4.1+Spring 3.2.3+Hibernate4.1.9做这个小实验,主要偏向于对layui这个前端界面控件的利用。用上去很

    spring-framework-3.2.3.RELEASE

    《Spring Framework 3.2.3.RELEASE:深入解析与应用》 Spring Framework,作为Java开发中的核心框架,以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)功能,极...

    LIBSVM3.2.3(修改Bug)

    包括libsvm包,官方指南和编译器 LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了...

    spring-framework-3.2.3.RELEASE-dist.zip

    《Spring Framework 3.2.3.RELEASE:深入解析与应用》 Spring Framework,作为Java开发中的核心框架,以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)特性,极...

    Struts2 2.3.15 + Hibernate 3.x.x + Spring 3.2.3整合JAR包

    Spring 3.2.3版本增强了对JSR-330标准的支持,提供了更强大的事务管理,以及对其他框架如Hibernate的更好集成。在SSH整合中,Spring主要负责管理Bean的生命周期,实现服务和数据访问对象的依赖注入。 **SSH整合过程...

    spring3.2源码包

    Spring 框架是Java开发领域中的一个基石,它的出现极大地简化了企业级应用的构建。Spring 3.2 版本是该框架的一个重要里程碑,它在前几个版本的基础上进行了许多改进和优化,旨在提高开发效率、可维护性和性能。下面...

    spring mvc3.2.3+ myibatis3.2.2

    spring mvc3.2.3+ myibatis3.2.2 分 dao service pojo mapper controllor等层,有敢于网上下载多不适用,故作一层次分明功能较全面(列表,登录验证,增加)的功能验证性web程序以为分享,因程序为功能验证性程序,...

    spring-web-3.2.3.RELEASE.jar

    spring-web-3.2.3.RELEASE.jar。。。。。。。。。。。

    spring-framework-3.2.3.RELEASE 源码

    再者,Spring MVC是用于构建Web应用程序的模块,3.2.3.RELEASE版的MVC框架在处理HTTP请求、视图渲染和数据绑定等方面都有卓越的表现。源码分析可以帮助我们了解请求是如何被路由的,以及模型-视图-控制器模式如何在...

    java Spring.jar包3.2.3

    在这个特定的场景中,提到的是Spring.jar包的3.2.3版本,这是一个较旧但仍然广泛使用的版本。 Spring框架主要由以下几个核心模块组成: 1. **IoC(Inversion of Control,控制反转)**:这是Spring最基础的概念,...

Global site tag (gtag.js) - Google Analytics