91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

spring-cloud-feign怎么對Java8日期的序列化

發布時間:2021-06-30 15:26:03 來源:億速云 閱讀:441 作者:chen 欄目:大數據

這篇文章主要介紹“spring-cloud-feign怎么對Java8日期的序列化”,在日常操作中,相信很多人在spring-cloud-feign怎么對Java8日期的序列化問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”spring-cloud-feign怎么對Java8日期的序列化”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

spring-cloud-feign 對 Java8 日期的序列化

前言

如果用過spring-cloud的同學應該知道,feign接口默認底層默認是http來進行請求的,一般spring的web項目都是通過Jackson來進行序列化跟反序列化,在對象傳輸的時候,如果對象里面的時間類型是Java8的時間類,可能會反序列化失敗,因此,我們需要配置一下針對Java8提供的時間類進行定制的序列化,因此,我們默認使用LocalDateTime示例,LocalDateLocalTime實際上也是一樣的

引入JSR310依賴

在項目內,我們引用下依賴

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.8.11</version>
</dependency>

使用JSR310默認配置

默認的情況下,JSR310給我們提供了轉換成字符串的序列化/反序列化類,分別是LocalDateTimeSerializer/LocalDateTimeDeserializer,我們可以使用已經有的實現,來進行序列化

接著我們通過Spring的自動裝配,返回一個Bean

@Configuration
public class JacksonSerializerConfiguration{

    @Bean
    public ObjectMapper buildObjectMapper(){
        ObjectMapper objectMapper = new ObjectMapper();
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
                      .addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
              
        objectMapper.registerModule(javaTimeModule);
        return objectMapper;
    }
}

使用自定義配置

當然,我們不想使用默認的,我們也可以自定義配置,繼承JsonSerializer類,實現抽象方法,或者繼承JSR310InstantSerializer類,然后重寫構造器,作為示例,我們就繼承JsonSerializer作為演示

例如,我們想序列化LocalDateTime到秒的時間戳,代碼如下

public class InstantSerializer extends JsonSerializer<LocalDateTime> {

    @Override
    public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
        gen.writeNumber(DateUtils.toSecond(value));
    }
}

public class InstantDeserializer extends JsonDeserializer<LocalDateTime> {

    @Override
    public LocalDateTime deserialize(JsonParser p, DeserializationContext txt) throws IOException, JsonProcessingException {
        return Instant.ofEpochSecond(p.getLongValue()).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
}

@Configuration
public class JacksonSerializerConfiguration{

    @Bean
    public ObjectMapper buildObjectMapper(){
        ObjectMapper objectMapper = new ObjectMapper();
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class, new InstantSerializer())
                      .addDeserializer(LocalDateTime.class,new InstantDeserializer());
                      
        objectMapper.registerModule(javaTimeModule);  
        return objectMapper;
    }
}

總結

JSR310給我們很多的基礎實現,簡單的可以使用基礎的實現,如果要自定義的話,通過繼承jackson提供的抽象類,自己進行實現,兩者實現上差不多,不過通過繼承更靈活,更可控,使用jsr310更方便,具體的使用就仁者見仁智者見智了

到此,關于“spring-cloud-feign怎么對Java8日期的序列化”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

讷河市| 雷山县| 五指山市| 沂南县| 弥渡县| 城口县| 陆丰市| 奉化市| 九江市| 张家川| 满城县| 黑水县| 东平县| 邯郸县| 兴山县| 贡嘎县| 庆元县| 汉寿县| 澄城县| 福州市| 云霄县| 灵璧县| 天门市| 武陟县| 德江县| 吉木乃县| 大安市| 红安县| 常山县| 萍乡市| 卢湾区| 花莲县| 峨眉山市| 罗田县| 新野县| 新巴尔虎右旗| 望城县| 突泉县| 类乌齐县| 奉贤区| 元谋县|