`

spring mvc实战系列教程(6)--处理日期转换

阅读更多

     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实战系列教程(2)--常用请求参数接收方式

    本教程将深入探讨Spring MVC中常用的请求参数接收方式。通过实践案例`ParamPassDemo.java`,我们将了解到几种常见的方法,以便在控制器中获取用户提交的数据。 1. **路径变量(Path Variables)** 当URL路径中包含...

    Spring3.0-MVC_简单自学教程(英文)

    Spring 3.0 MVC系列教程包括以下几个部分: 1. Spring 3.0 MVC框架简介:这部分将介绍Spring MVC的基本概念和架构。 2. 创建Spring 3.0 MVC的"Hello World"应用:通过一个简单的示例,帮助初学者理解如何搭建和运行...

    Spring MVC3。 最近研究

    在Spring 3.0 MVC系列教程中,我们可以逐步了解这个框架: 1. **介绍Spring 3.0 MVC框架**:这部分会概述Spring MVC的基本概念,包括它的工作原理和架构设计,以及如何开始搭建一个基本的Spring MVC项目。 2. **...

    spring MVC 3.0实战指南

    SpringMVC通过一系列的组件协作将Web请求转换为模型对象,然后将其传递给视图以生成响应。SpringMVC3.0实战指南详细地介绍了如何使用SpringMVC 3.0版本进行Web开发,该指南针对初学者提供了详尽的入门知识和实战指导...

    Spring技术栈构建完整java前后台团购网站java spring视频教程附源码

    - 数据绑定与验证:Spring MVC支持自动的数据绑定和校验功能,能够有效减少前端与后端之间的数据转换工作量,并确保数据的有效性。 - 视图渲染:支持多种视图技术(如Thymeleaf、FreeMarker等),可根据实际需求...

    传智播客_Springmvc+Mybatis全套视频+代码+文档+教案

    6. **错误处理机制**:提供了一系列异常处理机制,方便开发者处理各种运行时错误。 ### Spring MVC的工作原理 当客户端发送一个HTTP请求至服务器时,Spring MVC通过DispatcherServlet接收该请求,并将其转发给相应...

    SpringMVC项目实战教程

    首先,SpringMVC的核心组件包括DispatcherServlet(前端控制器)、Controller(控制器)、Model(模型)、View(视图)以及一系列的拦截器和转换器。DispatcherServlet是入口点,负责接收HTTP请求,并将其转发给适当...

    Spring Web Flow2入门(二)

    在本教程中,我们将深入探讨Spring Web Flow2的基础知识,并通过两个具体的示例——基于Java配置和基于XML配置——来理解其工作原理。 **一、Spring Web Flow2 概述** 1. **核心概念:** - **Flow**:是SWF的基本...

    springmybatis

    1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的...

    spring-thymeleaf-part1:这是我的技术博客中有关Java生态系统和相关主题的一系列教程的一部分

    6. 实战演练 "spring-thymeleaf-part1-master"这个文件名暗示了这是一个项目源码库,可能包含了一个基本的Spring+Thymeleaf应用的初始结构。你可以通过克隆或下载这个项目,查看其目录结构,了解如何配置和使用...

    传智播客struts2,spring,hibernate最新PPT

    这份“传智播客struts2,spring,hibernate最新PPT”提供了深入理解这三大框架的宝贵资源,与视频教程同步,对于学习者来说是一份极具价值的学习资料。 Struts2作为MVC(Model-View-Controller)框架,主要负责控制...

    SpringSecurity 狂神资源文件.zip

    SpringSecurity是中国Java开发者广泛使用...这个“SpringSecurity 狂神资源文件.zip”应该包含了丰富的学习材料,包括视频教程、实战项目、PPT讲解等,对于想要精通SpringSecurity的开发者来说,是一份宝贵的参考资料。

    WebWork教程-0.90版

    ### WebWork教程精要 #### 一、WebWork框架概览 **WebWork**是由**OpenSymphony**组织开发的一款面向组件化和代码重用的MVC架构的J2EE Web框架。它专注于提高开发效率并简化应用逻辑,使得开发者能够更加专注于...

    jsp程序设计案例教程

    - Struts、Spring MVC等框架:介绍这些MVC框架如何简化JSP和Servlet的开发。 9. ** easybuyonline ** - 实战项目: - 创建一个在线购物系统:涉及用户注册、登录、商品浏览、购物车、订单处理等功能。 - 应用...

    JSP动态网站开发与实例

    - Struts、Spring MVC、JSF等框架在JSP基础上实现了MVC架构,提高了开发效率。 6. **JSP开发实践** - 数据库连接与操作:通过JDBC连接数据库,执行SQL查询,处理结果集。 - 文件上传下载:使用Servlet API处理...

    struts2教程我在培训时用的

    ### Struts2教程知识点梳理 #### 一、Struts2概述 **1.1 MVC简介** - **Model1与Model2** - **Model1**:早期的MVC模式,通常指的是Servlet+JSP的形式,其中JSP既充当视图也承担一定的控制逻辑。 - **Model2**...

    JSP 实用教程.rar

    - Struts、Spring MVC等框架如何利用JSP实现MVC模式。 8. **实战演练** - 创建第一个JSP页面:了解基本结构和元素的使用。 - 数据传递:通过请求参数、session和application共享数据。 - 错误处理和日志记录:...

    尚硅谷S4S2H4整合案例视频教程

    Hibernate是一个面向对象的持久层框架,它提供了对象关系映射(ORM)的功能,能够将Java对象映射到数据库表,并自动处理对象与数据库之间的转换。使用Hibernate,开发者无需编写复杂的SQL语句即可完成数据的增删改查...

    Struts_2核心技术与Java_EE框架整合开发

    - **教学视频**:针对每个章节提供了详细的视频教程,帮助学习者更好地理解和掌握Struts 2的核心技术和实战案例。 - **范例源程序**:随书提供的源代码示例,覆盖了所有知识点和实战案例。 - **课后习题**:每章末尾...

Global site tag (gtag.js) - Google Analytics