溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringBoot?jackson提供對LocalDate的支持方式是什么

發(fā)布時間:2022-01-26 11:47:25 來源:億速云 閱讀:313 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章的內(nèi)容主要圍繞SpringBoot jackson提供對LocalDate的支持方式是什么進行講述,文章內(nèi)容清晰易懂,條理清晰,非常適合新手學(xué)習(xí),值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

jackson提供對LocalDate的支持

SpringBoot默認使用jackson來進行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可以很方便的對日期進行處理,但是在返回給前端時,展示為如下的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格式。

實現(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));
    }
}

實體類添加注解

實體類添加如下的注解

    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate date;

感謝你的閱讀,相信你對“SpringBoot jackson提供對LocalDate的支持方式是什么”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關(guān)知識點,可以關(guān)注億速云網(wǎng)站!小編會繼續(xù)為大家?guī)砀玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI