1. 程式人生 > >Spring Boot 物件中Date型別自段轉json時的格式問題解決

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