今天早上看到一个问题: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
相关推荐
SSM框架是Spring MVC、Spring 3.2.3和MyBatis 3.2.3集成的常用Java Web开发框架,它为开发者提供了一种高效、灵活的后端架构解决方案。下面将详细介绍这些组件以及如何在Oracle数据库环境下进行集成。 **Spring MVC...
8. **性能和稳定性提升**:Spring 3.2.3对许多内部组件进行了优化,提高了整体性能,同时修复了大量的bug,增强了系统的稳定性和可靠性。 9. **注解驱动的开发**:3.2.3版本进一步推广了注解的使用,如@Component、...
** Jersey2.13 + Spring3.2.3入门实例详解** 本文将深入探讨如何结合Jersey 2.13和Spring 3.2.3框架构建一个入门级的Web服务应用。首先,我们来了解这两个关键组件的核心功能。 **Jersey** 是Java语言中最流行的...
本篇文章将详细介绍如何将Spring 3.2.3版本与Quartz 2.2版本进行整合配置,以便在Spring应用中实现灵活的定时任务管理。 首先,集成Quartz到Spring项目中,我们需要在项目的`pom.xml`或`build.gradle`文件中添加...
Spring3.2.3基础类包是专门为初学者设计的,它包含了Spring框架最基本、最核心的部分,不包括额外的模块如AOP(面向切面编程)等高级功能。这样的设计使得学习者能够更专注于理解和掌握Spring的核心概念,避免在学习...
本文将详细讲解如何在Spring 3.2.3版本中配置SessionFactory,以便整合Hibernate 4.2.2,实现对数据库操作的高效管理。SessionFactory是Hibernate的核心组件,它负责创建Session对象,而Session则是与数据库交互的...
【Spring3.2.3+Hibernate4.2项目框架搭建】是关于构建基于Spring和Hibernate的Web应用程序的教程。在该框架中,Spring作为依赖注入容器和应用上下文管理工具,而Hibernate则作为对象关系映射(ORM)框架,负责数据库...
这个"hibernate3.3 struts-2.3.20 spring3.2.3 整合框架"压缩包包含了这三个框架的特定版本,适用于旧项目的开发或者学习。开发者只需将所有库文件复制到项目的lib目录下,然后按照SSH的整合教程配置相应的XML文件,...
这是第一个专门针对SSH框架的课程设计,使用Struts 2.3.4.1+Spring 3.2.3+Hibernate4.1.9做这个小实验,主要偏向于对layui这个前端界面控件的利用。用上去很
《Spring Framework 3.2.3.RELEASE:深入解析与应用》 Spring Framework,作为Java开发中的核心框架,以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)功能,极...
包括libsvm包,官方指南和编译器 LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了...
《Spring Framework 3.2.3.RELEASE:深入解析与应用》 Spring Framework,作为Java开发中的核心框架,以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)特性,极...
Spring 3.2.3版本增强了对JSR-330标准的支持,提供了更强大的事务管理,以及对其他框架如Hibernate的更好集成。在SSH整合中,Spring主要负责管理Bean的生命周期,实现服务和数据访问对象的依赖注入。 **SSH整合过程...
Spring 框架是Java开发领域中的一个基石,它的出现极大地简化了企业级应用的构建。Spring 3.2 版本是该框架的一个重要里程碑,它在前几个版本的基础上进行了许多改进和优化,旨在提高开发效率、可维护性和性能。下面...
spring mvc3.2.3+ myibatis3.2.2 分 dao service pojo mapper controllor等层,有敢于网上下载多不适用,故作一层次分明功能较全面(列表,登录验证,增加)的功能验证性web程序以为分享,因程序为功能验证性程序,...
spring-web-3.2.3.RELEASE.jar。。。。。。。。。。。
再者,Spring MVC是用于构建Web应用程序的模块,3.2.3.RELEASE版的MVC框架在处理HTTP请求、视图渲染和数据绑定等方面都有卓越的表现。源码分析可以帮助我们了解请求是如何被路由的,以及模型-视图-控制器模式如何在...
在这个特定的场景中,提到的是Spring.jar包的3.2.3版本,这是一个较旧但仍然广泛使用的版本。 Spring框架主要由以下几个核心模块组成: 1. **IoC(Inversion of Control,控制反转)**:这是Spring最基础的概念,...