Java有各种数据类型,但页面传到服务端的数据通常都是字符串型的,springmvc对常用的基本数据类型做了自动类型转换,但对于日期类型,由于日期格式多种多样,所以spring mvc无法统一处理,看下面的例子:
/**
*
* @author 演示常用客户端参数接收方式
*
*/
@Controller
@RequestMapping("/paramPassDemo")
public class ParamPassDemo {
/**
* 使用领域对象来接收参数
*
* @param user
* @return
*/
@RequestMapping("/queryStringWithDomainObj")
public String test3(User user) {
System.out.println("用户名为:" + user.getUserName() + ",密码为:" + user.getUserPass() + "年龄为:" + user.getAge()+",生日为:"+user.getBirthday());
return "NewFile";
}
}
这里使用领域对象User来自动接收页面传来的参数,领域对象的属性为:
public class User implements Serializable{
private String userName;
private String userPass;
private Integer age;
private Date birthday;
getters &setters...}
其中包含一个java.util.Date类型的属性birthday,其他属性均属可以自动转换的类型。直接在客户端浏览器访问会发生400异常,表示请求格式有误,原因就是不能把形如11-21-1998或其他格式日期字符串自动转成java的Date类型
http://localhost:8080/abc/paramPassDemo/queryStringWithDomainObj?userName=%E5%BC%A0%E4%B8%89&userPass=123&birthday=11-21-1998&age=45
解决方案如下:
1.局部方式
使用Spring MVC注解org.springframework.format.annotation.DateTimeFormat标注到需要转换的属性上,如:
@DateTimeFormat(pattern="MM-dd-yyyy")
private Date birthday;
再次访问,spring mvc的controller即可自动转换并接收
2. 全局方式
如果需要转换的日期字段很多,并且可以确定格式统一,那么使用局部方式就比较繁杂枯燥,这时可以使用spring mvc提供的全局转换器converter一起解决,步骤如下:
1)创建自定义日期转换器类实现org.springframework.core.convert.converter.Converter接口并重写其
T convert(S source);方法,该方法入参为传入的类型,出参(返回类型)为希望转换后的类型,比如这里我们希望将接受到的String类型的日期字符串转换为java.util.Date类型,那么就这样写:
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source ) {
//获取日期格式化类,支持多种时间格式
SimpleDateFormat sdf = getSimpleDateFormat(source);
try {
Date date = sdf.parse(source);
return date;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
private SimpleDateFormat getSimpleDateFormat( String source ) {
SimpleDateFormat sdf = new SimpleDateFormat();
if( Pattern.matches("^\\d{4}-\\d{2}-\\d{2}$", source )) {
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
else if(Pattern.matches("^\\d{2}-\\d{2}-\\d{4}$", source )){
sdf = new SimpleDateFormat("MM-dd-yyyy");
}
else {
System.out.println("日期格式错误");
}
return sdf;
}
}
私有的工具方法用于支持多种日期格式。
2)在spring mvc配置文件中增加对自定义日期转换器的声明
<bean id="conversion-service"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.khbr.springmvcdemo.converter.DateConverter" />
</set>
</property>
</bean>
可以看到,springmvc提供的转换工厂bean(ConversionServiceFactoryBean)可以支持多种converter
3)在spring mvc配置文件的mvc:annotation-driven节点中增加conversion-service属性,执行刚才定义的ConversionServiceFactoryBean的id
<mvc:annotation-driven conversion-service="conversion-service">
再次测试同样的请求(注意测试前将局部的@DateTimeFormat注解去掉),可以看到效果跟单独在字段上使用@DateTimeFormat注解一样,并且可以支持多种格式(请变换请求格式自行测试)。
当然,如果使用json为前后端交换格式,可以使用jackson之类的框架进行配置,这也是一种全局配置,我们后面再讨论。
相关推荐
本教程将深入探讨Spring MVC中常用的请求参数接收方式。通过实践案例`ParamPassDemo.java`,我们将了解到几种常见的方法,以便在控制器中获取用户提交的数据。 1. **路径变量(Path Variables)** 当URL路径中包含...
Spring 3.0 MVC系列教程包括以下几个部分: 1. Spring 3.0 MVC框架简介:这部分将介绍Spring MVC的基本概念和架构。 2. 创建Spring 3.0 MVC的"Hello World"应用:通过一个简单的示例,帮助初学者理解如何搭建和运行...
在Spring 3.0 MVC系列教程中,我们可以逐步了解这个框架: 1. **介绍Spring 3.0 MVC框架**:这部分会概述Spring MVC的基本概念,包括它的工作原理和架构设计,以及如何开始搭建一个基本的Spring MVC项目。 2. **...
SpringMVC通过一系列的组件协作将Web请求转换为模型对象,然后将其传递给视图以生成响应。SpringMVC3.0实战指南详细地介绍了如何使用SpringMVC 3.0版本进行Web开发,该指南针对初学者提供了详尽的入门知识和实战指导...
- 数据绑定与验证:Spring MVC支持自动的数据绑定和校验功能,能够有效减少前端与后端之间的数据转换工作量,并确保数据的有效性。 - 视图渲染:支持多种视图技术(如Thymeleaf、FreeMarker等),可根据实际需求...
6. **错误处理机制**:提供了一系列异常处理机制,方便开发者处理各种运行时错误。 ### Spring MVC的工作原理 当客户端发送一个HTTP请求至服务器时,Spring MVC通过DispatcherServlet接收该请求,并将其转发给相应...
首先,SpringMVC的核心组件包括DispatcherServlet(前端控制器)、Controller(控制器)、Model(模型)、View(视图)以及一系列的拦截器和转换器。DispatcherServlet是入口点,负责接收HTTP请求,并将其转发给适当...
在本教程中,我们将深入探讨Spring Web Flow2的基础知识,并通过两个具体的示例——基于Java配置和基于XML配置——来理解其工作原理。 **一、Spring Web Flow2 概述** 1. **核心概念:** - **Flow**:是SWF的基本...
1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的...
6. 实战演练 "spring-thymeleaf-part1-master"这个文件名暗示了这是一个项目源码库,可能包含了一个基本的Spring+Thymeleaf应用的初始结构。你可以通过克隆或下载这个项目,查看其目录结构,了解如何配置和使用...
这份“传智播客struts2,spring,hibernate最新PPT”提供了深入理解这三大框架的宝贵资源,与视频教程同步,对于学习者来说是一份极具价值的学习资料。 Struts2作为MVC(Model-View-Controller)框架,主要负责控制...
SpringSecurity是中国Java开发者广泛使用...这个“SpringSecurity 狂神资源文件.zip”应该包含了丰富的学习材料,包括视频教程、实战项目、PPT讲解等,对于想要精通SpringSecurity的开发者来说,是一份宝贵的参考资料。
- Struts、Spring MVC等框架:介绍这些MVC框架如何简化JSP和Servlet的开发。 9. ** easybuyonline ** - 实战项目: - 创建一个在线购物系统:涉及用户注册、登录、商品浏览、购物车、订单处理等功能。 - 应用...
- Struts、Spring MVC、JSF等框架在JSP基础上实现了MVC架构,提高了开发效率。 6. **JSP开发实践** - 数据库连接与操作:通过JDBC连接数据库,执行SQL查询,处理结果集。 - 文件上传下载:使用Servlet API处理...
### Struts2教程知识点梳理 #### 一、Struts2概述 **1.1 MVC简介** - **Model1与Model2** - **Model1**:早期的MVC模式,通常指的是Servlet+JSP的形式,其中JSP既充当视图也承担一定的控制逻辑。 - **Model2**...
- Struts、Spring MVC等框架如何利用JSP实现MVC模式。 8. **实战演练** - 创建第一个JSP页面:了解基本结构和元素的使用。 - 数据传递:通过请求参数、session和application共享数据。 - 错误处理和日志记录:...
Hibernate是一个面向对象的持久层框架,它提供了对象关系映射(ORM)的功能,能够将Java对象映射到数据库表,并自动处理对象与数据库之间的转换。使用Hibernate,开发者无需编写复杂的SQL语句即可完成数据的增删改查...
- **教学视频**:针对每个章节提供了详细的视频教程,帮助学习者更好地理解和掌握Struts 2的核心技术和实战案例。 - **范例源程序**:随书提供的源代码示例,覆盖了所有知识点和实战案例。 - **课后习题**:每章末尾...
JavaWeb是Java技术在Web应用开发中的一个重要领域,它涵盖了从服务器端编程、数据库交互到网页动态内容生成...这份"Javaweb(6)学习资料"很可能会包含这些技术的实战案例和详细教程,对于提升JavaWeb开发技能大有裨益。