重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
這篇文章給大家介紹SpringBoot如何格式化LocalTime和LocalDate以及LocalDateTime,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
成都創新互聯公司為您提適合企業的網站設計?讓您的網站在搜索引擎具有高度排名,讓您的網站具備超強的網絡競爭力!結合企業自身,進行網站設計及把握,最后結合企業文化和具體宗旨等,才能創作出一份性化解決方案。從網站策劃到成都做網站、成都網站建設、成都外貿網站建設, 我們的網頁設計師為您提供的解決方案。
好久好久沒更新這個文集了,上一次更新我都忘記是什么時間了,原計劃Spring Boot系列會寫十幾篇文章的,現在才寫到第7篇(含本文),后續還是會繼續更新吧,我一直覺得,寫博客的主要目的是梳理自己的技術棧,分享只是附屬價值,所以還是要堅持下去的
說說如何格式化Restful接口的時間類型,從JDK8開始提供了更方便日期時間的API,如:LocalTime、LocalDate和LocalDateTime,從此可以遠離原來的Date和Calendar類,日期操作變得簡單多了。
然而,在Spring Boot進行Restful接口開發中使用這些日期時間類型時,你會發現使用jackson的spring.jackson.date-format
配置進行日期類型格式化是無效的,為什么呢?
//以下是配置了`spring.jackson.date-format=yyyy-MM-dd HH:mm:ss`后, //接口返回LocalDateTime和Date的內容,你會發現Date類型的已經格式化, //但是LocalDateTime卻沒有。 { "localDateTime": "2019-07-14T12:20:23.615", "date": "2019-07-14 04:20:23" }
實際上在Jackson序列化的時候,會根據不同類型調用不同的Serializer
進行序列化,如果沒有默認的Serializer
時,調用的是類的toString()
。而Date類型序列化時會使用DateSerializer
,里面會使用spring.jackson.date-format
中的配置,而LocalDateTime則是通過LocalDateTimeSerializer
,LocalDateTimeSerializer
默認使用的是DateTimeFormatter.ISO_LOCAL_DATE_TIME
,所以就會返回上面的結果。
通過上文可以知道,如果能夠覆蓋默認的LocalDateTimeSerializer
,就可以按照自己的需求進行日期格式化了。
通過以下方式可以實現:
自定義Jackson2ObjectMapperBuilderCustomizer
的Bean,分別指定LocalDate、LocalDateTime和LocalTime的序列化和反序列化類(按需要定義對應的DatetimeFormatter),參考代碼如下:
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; /** * @Author Cent.Chen 2019-07-14 * @Description Dateformat Configuration. */ @Configuration public class DateformatConfig { /** * Date格式化字符串 */ private static final String DATE_FORMAT = "yyyy-MM-dd"; /** * DateTime格式化字符串 */ private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; /** * Time格式化字符串 */ private static final String TIME_FORMAT = "HH:mm:ss"; /** * 自定義Bean * * @return */ @Bean @Primary public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT))) .serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_FORMAT))) .serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(TIME_FORMAT))) .deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT))) .deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_FORMAT))) .deserializerByType(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME_FORMAT))); } }
重啟服務再次測試,返回格式化日期如下:
{ "localDateTime": "2019-07-14 12:33:11", "date": "2019-07-14 04:33:11" }
關于SpringBoot如何格式化LocalTime和LocalDate以及LocalDateTime就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。