這篇文章的內容主要圍繞SpringBoot jackson提供對LocalDate的支持方式是什么進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!
SpringBoot默認使用jackson來進行json格式轉換,我們在配置文件中加入如下配置可以統一的改變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; } }
LocalDate可以很方便的對日期進行處理,但是在返回給前端時,展示為如下的JSON結構:
{ "dayOfWeek": "FRIDAY", "month": "JANUARY", "year": 2020, "dayOfMonth": 3, "era": "CE", "dayOfYear": 3, "monthValue": 1, "chronology": { "calendarType": "iso8601", "id": "ISO" } }
前端組件就很難處理了。接下來,我們需要將此屬性反序列化并從JSON字符串序列化。為此,我們可以使用@JsonDeserialize和@JsonSerialize來注釋該類的LocalDate屬性,時期成為前端組件需要的String格式。
下面是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)); } }
實體類添加如下的注解
@JsonDeserialize(using = LocalDateDeserializer.class) @JsonSerialize(using = LocalDateSerializer.class) private LocalDate date;
感謝你的閱讀,相信你對“SpringBoot jackson提供對LocalDate的支持方式是什么”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。