Spring Boot 对象中Date类型自段转json时的格式问题解决

一、背景

今天一个同事咨询如何解决后台返回json时,Date类型的格式化如何解决。帮这个兄弟解决完后,觉得虽然很简单,还是写写记录下来,以后别人再问可以直接给连接了。

这位同事使用的是SpringBoot1.0框架。对这个问题1.0 和2.0没有区别。

二、处理单个或某几个Date类型字段的格式转换问题

这种情况下,只需要在字段上加一个@JsonFormat注解即可。如下

public class DateEntity {
	private Date dateTime = new Date();
	private Date dateTime1 = new Date();
	private Date dateTime2 = new Date();
	@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
	public Date getDateTime() {
		return dateTime;
	}
	public void setDateTime(Date dateTime) {
		this.dateTime = dateTime;
	}
	public Date getDateTime1() {
		return dateTime1;
	}
	public void setDateTime1(Date dateTime1) {
		this.dateTime1 = dateTime1;
	}
	public Date getDateTime2() {
		return dateTime2;
	}
	public void setDateTime2(Date dateTime2) {
		this.dateTime2 = dateTime2;
	}
	
}

三、配置全局的类型转换(SpringBoot有更好的实现方式,见后记)

如果系统中有很多Date类型字段的格式转换问题的话,一个一个的增加配置,显得太啰嗦了。这时候可以配置MappingJackson2HttpMessageConverter。也很简单,只需要增加一个java 配置类即可。全部代码如下

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
/**
 * @author xugj
 * 返回Json对象时候,全局Date类型转换配置
 * */
@Configuration
public class DateFormateConfig {
	private String dateFormate = "yyyy-MM-dd HH:mm:ss";
	
	@Bean
	public Jackson2ObjectMapperFactoryBean jackson2ObjectMapperFactoryBean() {
		Jackson2ObjectMapperFactoryBean r = new Jackson2ObjectMapperFactoryBean();
		r.setDateFormat(new SimpleDateFormat(dateFormate));
		return r;
	}
	
	@Bean
	public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(Jackson2ObjectMapperFactoryBean objectMapper) {
		MappingJackson2HttpMessageConverter r = new MappingJackson2HttpMessageConverter(objectMapper.getObject());
		List<MediaType>  mediaTypeList=Arrays.asList(MediaType.APPLICATION_JSON_UTF8);
		r.setSupportedMediaTypes(mediaTypeList);
		return r;
	}	
}

四、思考:这两种配置的优先级如何?

经测试,字段上的格式设置会覆盖全局的格式设置。

 

后记:

spring boot 项目在配置文件中设置,可以很简单的实现全局的日期格式转换。

在apllication.properties加入下面配置
#时间戳统一转换
#spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

##这个是时区,一定要加,否则会默认为格林尼治时间,即少8小时
#spring.jackson.time-zone=GMT+8

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值