SpringMVC 返回json的日期格式的问题的解决方法
Posted listener_lei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC 返回json的日期格式的问题的解决方法相关的知识,希望对你有一定的参考价值。
springMVC中josn的日期类型输出默认是时间戳,需要进行日期格式转换。
格式化输出json
方法1、(适用spring3.x和4.x的版本)
在实体类的getter方法上面添加@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
就可以将json的日期格式化。需要导入的json的相关jar包
@JsonFromat存在于jackson-annotations-2.1.0.jar中。
Maven项目需要添加的依赖:
<!-- json数据 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.core.version}</version> </dependency> <properties> <jackson.core.version>2.4.2</jackson.core.version> </properties>
在IDEA中查看maven的jar包依赖
优缺点:
优点是简单方便,缺点是需要在每个需要的属性的getter方法上面添加。宏观的看比较繁琐,但实际开发中
也就一行代码的事情,唯一不好的是mybatis自动生成实体类会覆盖。
方法2(在spring3.x版本中测试可用)
在上面的方法中虽然简单方便,但缺点也很明显,自动生成代码会覆盖实体类,而且每个日期属性都要手动添加,
实际中日期属性又是普遍必备。因此,大可全局处理,统一格式。这里需要说下,在数据库中的date和timestamp
都会被mybatis转换成date对象。至于生日精确到日、时间精确到到秒的格式规范可以让显示层做处理。
统一成yyyy-MM-dd HH:mm:ss。
MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册
一个JsonSerializer<T>。然后在配置文件中注入自定义的ObjectMapper。
第一步:编写子类继承ObjectMapper
package cn.ll.ssm.controller.converter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.map.JsonSerializer; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializerProvider; import org.codehaus.jackson.map.ser.CustomSerializerFactory; /** * 项目名称:springmvc_02_ssm * 类名称:CustomJsonDateConverter * 类描述:解决Date类型返回json格式为自定义格式 * 创建人:LL * 创建时间:2018年4月29日 上午11:13:08 * @version */ public class CustomJsonDateConverter extends ObjectMapper { public CustomJsonDateConverter(){ CustomSerializerFactory factory = new CustomSerializerFactory(); factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){ @Override public void serialize(Date value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); jsonGenerator.writeString(sdf.format(value)); } }); this.setSerializerFactory(factory); } }
第二步:在SpringMVC.xml中进行配置
<mvc:annotation-driven conversion-service="conversionService" validator="validator"> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="objectMapper" ref="customObjectMapper"></property> </bean> </mvc:message-converters> </mvc:annotation-driven> <bean id="customObjectMapper" class="cn.ll.ssm.controller.converter.CustomJsonDateConverter"></bean>
第三步:
这个配置无法和上一个@JsonFormat共同使用。由于全局统一了日期格式,date和datetime以及timestamp都是
一个格式,如果生日等date字段需要精简,只能在显示层裁剪。
参考:http://www.jb51.net/article/103032.htm
以上是关于SpringMVC 返回json的日期格式的问题的解决方法的主要内容,如果未能解决你的问题,请参考以下文章
springmvc--json--返回json的日期格式问题
springmvc返回json数据时,日期数据显示为数字的解决方式