SpringBoot?jackson提供對LocalDate的支持方式
jackson提供對LocalDate的支持
SpringBoot默認(rèn)使用jackson來進(jìn)行json格式轉(zhuǎn)換,我們在配置文件中加入如下配置可以統(tǒng)一的改變Spring MVC返回值的日期格式類型
spring.jackson.date-format=yyyy-MM-dd spring.jackson.time-zone=GMT+8 spring.jackson.serialization.write-dates-as-timestamps=false
但是這個配置對于java8新提供的日期APILocalDate、LocalDateTime等無效。
解決辦法
引入依賴
<dependency> ? ? ? <groupId>com.fasterxml.jackson.datatype</groupId> ? ? ? <artifactId>jackson-datatype-jsr310</artifactId> ? ? ? <version>2.8.9</version> </dependency>
啟動主類添加如下代碼
@SpringBootApplication public class GroupApplication { ? ? public static void main(String[] args) { ? ? ? ? SpringApplication.run(GroupApplication.class, args); ? ? } ? ? ? /** ? ? ?* 提供jackson對LocalDate等java8提供的日期的序列化支持 ? ? ?*/ ? ? ? @Bean(name = "mapperObject") ? ? public ObjectMapper getObjectMapper() { ? ? ? ? ObjectMapper om = new ObjectMapper(); ? ? ? ? JavaTimeModule javaTimeModule = new JavaTimeModule(); ? ? ? ? javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); ? ? ? ? javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); ? ? ? ? javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); ? ? ? ? om.registerModule(javaTimeModule); ? ? ? ? return om; ? ? } }
使用Jackson格式化LocalDate對象
LocalDate可以很方便的對日期進(jìn)行處理,但是在返回給前端時,展示為如下的JSON結(jié)構(gòu):
{ ?? ?"dayOfWeek": "FRIDAY", ?? ?"month": "JANUARY", ?? ?"year": 2020, ?? ?"dayOfMonth": 3, ?? ?"era": "CE", ?? ?"dayOfYear": 3, ?? ?"monthValue": 1, ?? ?"chronology": { ?? ??? ?"calendarType": "iso8601", ?? ??? ?"id": "ISO" ?? ?} }
前端組件就很難處理了。接下來,我們需要將此屬性反序列化并從JSON字符串序列化。為此,我們可以使用@JsonDeserialize和@JsonSerialize來注釋該類的LocalDate屬性,時期成為前端組件需要的String格式。
實(shí)現(xiàn)LocalDateDeserializer和LocalDateSerializer
下面是LocalDateSerializerand LocalDateDeserializer類的定義。
public class LocalDateDeserializer extends StdDeserializer<LocalDate> { ?? ?protected LocalDateDeserializer() { ?? ??? ?super(LocalDate.class); ?? ?} ?? ?@Override ?? ?public LocalDate deserialize(JsonParser parser, DeserializationContext context) throws IOException { ?? ??? ?return LocalDate.parse(parser.readValueAs(String.class)); ?? ?} }
public class LocalDateSerializer extends StdSerializer<LocalDate> { ?? ?public LocalDateSerializer() { ?? ??? ?super(LocalDate.class); ?? ?} ?? ?@Override ?? ?public void serialize(LocalDate value, JsonGenerator generator, SerializerProvider provider) throws IOException { ?? ??? ?generator.writeString(value.format(DateTimeFormatter.ISO_LOCAL_DATE)); ?? ?} }
實(shí)體類添加注解
實(shí)體類添加如下的注解
? ? @JsonDeserialize(using = LocalDateDeserializer.class) ? ? @JsonSerialize(using = LocalDateSerializer.class) ? ? private LocalDate date;
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java多線程實(shí)現(xiàn)交通燈管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java多線程實(shí)現(xiàn)交通燈管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08IntellJ IDEA JAVA代碼任務(wù)標(biāo)記實(shí)例解析
這篇文章主要介紹了IntellJ IDEA JAVA代碼任務(wù)標(biāo)記實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07