Spring Boot 物件中Date型別自段轉json時的格式問題解決
阿新 • • 發佈:2018-12-29
一、背景
今天一個同事諮詢如何解決後臺返回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