1 Spring自身的支持

1.1 factory-bean

<bean id="dateFormat" class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd" />
</bean>
<bean id="user" class="zxy.demo.springmvc.domain.UserInfo">
<constructor-arg value="10" />
<constructor-arg index="1" value="名字" />
<constructor-arg index="2">
<bean factory-bean="dateFormat" factory-method="parse">
<constructor-arg value="2016-12-19" />
</bean>
</constructor-arg>
</bean>

作用于单个实体,用于xml文件配置。

1.2 DateTimeFormat

这是一个注解,完整类名是org.springframework.format.annotation.DateTimeFormat,用于http请求入参,只能作用于具体的实体对象,如下

@DateTimeFormat(pattern="yyyy-MM-dd")

1.3 InitBinder

只用于http请求入参,作用于全局,可搭配@Controller@ControllerAdvice使用,如下

@ControllerAdvice
public class MyControllerAdvice {
@InitBinder
public void initDate(WebDataBinder binder) {
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH");
// dateFormat.setLenient(false);
// binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); // Spring 4.2之后的写法
}
}

1.4 conversion-service

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="zxy.demo.springmvc.converter.DateConverter"/>
</set>
</property>
</bean> <mvc:annotation-driven conversion-service="conversionService"/>
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
// ...
}
}

DateConverter是一个自定义类,实现接口org.springframework.core.convert.converter.Converter,重写convert()方法即可。作用于全局,用于http请求入参


2 说明

前面说的日期处理,没有一种是用于请求返回的,如果是要返回数据,并且使用json进行系列化的,那么SpringMVC支持的有jackson跟Gson,具体要看引入了哪个jar包,如果两个引入了,那么将以jackson为准,具体可看org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser这个类,关键看两个成员变量jackson2PresentgsonPresent,这是两个boolean值,根据这两个成员变量看关联的代码即可。

:由于一般接口返回的数据是json格式的,所以jackson跟Gson这两个包肯定是要引入一个的,不然请求会报错,如“org.springframework.core.convert.ConversionFailedException: Failed to convert from type xxx to type xxx for ...”,这时候引入两个包之中的一个就可以让对象序列化为Json进行传输了。同理xml格式的序列化也可参考AnnotationDrivenBeanDefinitionParser这个类进行相应的配置。

:下面的代码是基于Spring 4.3.8.RELEASE,其他版本应该也类似。


3 jackson

3.1 JsonFormat

这是一个注解,完整类名是com.fasterxml.jackson.annotation.JsonFormat,只能用于http请求返回,只能作用于具体的实体对象,如下

@JsonFormat(pattern = "yyyy-MM-dd HH:mm")

3.2 message-converters

作用于全局,只用于请求返回

<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" >
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" p:simpleDateFormat="yyyy-MM-dd HH:mm:ss" />
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

4 Gson

4.1 message-converters

作用于全局,只用于请求返回

<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.GsonHttpMessageConverter">
<property name="gson">
<bean class="org.springframework.http.converter.json.GsonFactoryBean" p:dateFormatPattern="yyyy-MM-dd HH:mm:ss" />
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

5 最后

如果作用域单个的跟作用于全局的都配置了,那么配置单个实体的将最终生效而不会用全局的配置。

对于使用message-converters的方式,如果还需要更多的配置参数,可以看spring-webmvc的AnnotationDrivenBeanDefinitionParser这个类跟spring-web的org.springframework.http.converter.json包下的类即可。

更多的日期时间处理方式,可参考官方文档。


6 参考

Spring 日期时间处理的更多相关文章

  1. Springboot 关于日期时间格式化处理方式总结

    项目中使用LocalDateTime系列作为DTO中时间的数据类型,但是SpringMVC收到参数后总报错,为了配置全局时间类型转换,尝试了如下处理方式. 注:本文基于Springboot2.x测试, ...

  2. MySQL 日期时间类型怎么选?千万不要乱用!

    构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 以及使用 int 来存储 unix timestamp. 不仅新手,包 ...

  3. 全网最全!彻底弄透Java处理GMT/UTC日期时间

    目录 前言 本文提纲 版本约定 正文 Date类型实现 时区/偏移量TimeZone 设置默认时区 让人恼火的夏令时 Date时区无关性 读取字符串为Date类型 SimpleDateFormat格式 ...

  4. 一文告诉你Java日期时间API到底有多烂

    前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...

  5. JAVA中计算两个日期时间的差值竟然也有这么多门道

    上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...

  6. EasyUI datagrid 日期时间格式化

    EasyUI datagrid中显示日期时间时,会显示为以下不太直观的数值: 添加以下JavaScript脚本,然后在field中添加 formatter: DateTimeFormatter 即可. ...

  7. POCO库——Foundation组件之日期时间DateTime

    日期时间DateTime:内部提供多个设计计时器.日期.时区.时间戳等: Clock.h :Clock时钟计时类,_clock:Int64类型时钟值,CLOCKVAL_MIN.CLOCKVAL_MAX ...

  8. db2 日期时间格式

    db2日期和时间常用汇总 1.db2可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值. SELECT 'HELLO DB2 ...

  9. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

随机推荐

  1. golang的http分析

    首先,要认识一个贯穿始终的接口http.Handler type Handler interface { ServeHTTP(ResponseWriter, *Request) }   其中,两个参数 ...

  2. webpack快速掌握教程

    转载http://yijiebuyi.com/blog/46fb97b11fb8f4055e0b04d1cecb1f69.html #为什么用webpack 如果我们 前端 javascript 能像 ...

  3. 手机自动化测试:appium源码分析之bootstrap一

    手机自动化测试:appium源码分析之bootstrap一   前言: poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.popte ...

  4. C#, VB.NET如何加密PDF文档

    在日常工作中,人们通常通过加密PDF文档的方式来保护PDF文档.不管是公司还是个人,使用PDF加密术来设置一些权限是必不可少的.为了使PDF文档既可读又不能被未授权的用户所更改,一份PDF文档往往需要 ...

  5. Git安装与上传代码至Github

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6642887.html 这篇文章应该是全网最新,最全,最靠谱的Github安装到上传代码的流程. 1.Git ...

  6. jmeter JDBC Request (查询数据库获取数据库数据) 的使用

    JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration配置原 ...

  7. 《Python自然语言处理》第二章 学习笔记

    import nltk from nltk.book import * nltk.corpus.gutenberg.fileids() emma = nltk.corpus.gutenberg.wor ...

  8. Laravel框架一:原理机制篇

    Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特点.以下是本人一点粗浅的认识,不敢奢求他人同意,更不能一一而足,仅为自己做一点总结而已. 一. 请求周期 Laravel ...

  9. Unity3D 正六边形,环状扩散,紧密分布,的程序

    最近在做一个正六边形的游戏,被一开始的布局难倒了. 需求:中心有个正六边形,输入围绕中心扩散的环数,自动创建和摆放. 大概就是这样的吧,我觉得这个非常轻松的就可以搞定了.啊~~~~~啊~~~ 五环~~ ...

  10. 【转】JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理

    转自:http://www.cnblogs.com/ysw-go/ 获取数据库自动生成的主键 我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. ...