欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring rest接口中的LocalDateTime日期類型轉時間戳

 更新時間:2023年03月28日 10:20:59   作者:QiHY  
這篇文章主要介紹了Spring rest接口中的LocalDateTime日期類型轉時間戳的方法,Java程序中一般將日期類型定義為LocalDateTime,數據庫中保存的時間是0時區(qū)的時間

本文介紹spring-rest接口中的LocalDateTime日期類型轉時間戳的方法。

具體的代碼參照

示例項目 https://github.com/qihaiyan/springcamp/tree/master/spring-localdatetime-epoch

一、概述

java程序中一般將日期類型定義為LocalDateTime,數據庫中保存的時間是0時區(qū)的時間(UTC時間)。對于接口來說,為了支持全球化多時區(qū),接口中的日期類型通常會返回UTC時間戳,簡稱Epoch,數據類型為long,前端程序會根據本地時區(qū),將時間戳轉換為日期格式的字符串,如YYYY-mm-dd HH:mm:ss。

如果在每個時間型字段在接口返回時都進行轉換處理,會比較繁瑣。應該在一個統(tǒng)一的地方處理這種轉換,業(yè)務邏輯處理過程中不感知這種轉換。

二、通過Jackson2ObjectMapperBuilderCustomizer進行全局類型轉換

spring提供了Jackson2ObjectMapperBuilderCustomizer可以用于自定義json與對象之間相互轉換的處理。

通過自定義Jackson2ObjectMapperBuilderCustomizer,我們可以在json與對象的相互轉換轉換階段完成LocalDateTime和Epoch之間的轉換,包括接口的入參和出參。

@Configuration
public class LocalDateTimeToEpochSerdeConfig {
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, new LocalDateTimeToEpochSerializer())
                .deserializerByType(LocalDateTime.class, new LocalDateTimeFromEpochDeserializer());
    }
    /**
     * 序列化
     */
    public static class LocalDateTimeToEpochSerializer extends JsonSerializer<LocalDateTime> {
        @Override
        public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)
                throws IOException {
            if (value != null) {
                long timestamp = value.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
                gen.writeNumber(timestamp);
            }
        }
    }
    /**
     * 反序列化
     */
    public static class LocalDateTimeFromEpochDeserializer extends JsonDeserializer<LocalDateTime> {
        @Override
        public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            NumberDeserializers.LongDeserializer longDeserializer = new NumberDeserializers.LongDeserializer(Long.TYPE, 0L);
            Long epoch = longDeserializer.deserialize(p, ctxt);
            return LocalDateTime.ofInstant(Instant.ofEpochSecond(epoch), ZoneId.systemDefault());
        }
    }
}

以上代碼中分別包含了json的序列化和反序列化操作,在序列化操作中,把LocalDateTime轉換為Epoch。

   /**
     * 序列化
     */
    public static class LocalDateTimeToEpochSerializer extends JsonSerializer<LocalDateTime> {
        @Override
        public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)
                throws IOException {
            if (value != null) {
                long timestamp = value.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
                gen.writeNumber(timestamp);
            }
        }
    }

在反序列化操作中,把Epoch轉換為LocalDateTime。

    /**
     * 反序列化
     */
    public static class LocalDateTimeFromEpochDeserializer extends JsonDeserializer<LocalDateTime> {
        @Override
        public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            NumberDeserializers.LongDeserializer longDeserializer = new NumberDeserializers.LongDeserializer(Long.TYPE, 0L);
            Long epoch = longDeserializer.deserialize(p, ctxt);
            return LocalDateTime.ofInstant(Instant.ofEpochSecond(epoch), ZoneId.systemDefault());
        }
    }

通過以上配置,我們可以在實體類中使用LocalDateTime類型??蛻舳苏埱蠼涌跁r,對于返回結果,自動轉換為Epoch數據,對于請求參數,自動從Epoch轉換為LocalDateTime。

到此這篇關于Spring rest接口中的LocalDateTime日期類型轉時間戳的文章就介紹到這了,更多相關Spring LocalDateTime內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go Java算法之簡化路徑實例詳解

    Go Java算法之簡化路徑實例詳解

    這篇文章主要為大家介紹了Go Java算法之簡化路徑實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 學習Java的9張思維導圖

    學習Java的9張思維導圖

    這篇文章主要為大家詳細介紹了學習Java的9張思維導圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java遍歷json字符串取值的實例

    Java遍歷json字符串取值的實例

    下面小編就為大家分享一篇Java遍歷json字符串取值的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例

    Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例

    這篇文章主要介紹了Java Swing中的按鈕(JButton)、組合框(JComboBox)、下拉列表(JList)和顏色選擇器(JColorChooser)組件使用案例,需要的朋友可以參考下
    2014-10-10
  • 深入理解Java設計模式之外觀模式

    深入理解Java設計模式之外觀模式

    這篇文章主要介紹了JAVA設計模式之外觀模式的的相關資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2021-11-11
  • springboot全局字符編碼設置方式(解決亂碼問題)

    springboot全局字符編碼設置方式(解決亂碼問題)

    這篇文章主要介紹了springboot全局字符編碼設置方式(解決亂碼問題),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java 3種方法實現進制轉換

    Java 3種方法實現進制轉換

    這篇文章主要介紹了Java 3種方法實現進制轉換,幫助大家利用Java處理數據,感興趣的朋友可以了解下
    2020-09-09
  • 如何從eureka獲取服務的ip和端口號進行Http的調用

    如何從eureka獲取服務的ip和端口號進行Http的調用

    這篇文章主要介紹了如何從eureka獲取服務的ip和端口號進行Http的調用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SystemServer進程啟動過程解析

    SystemServer進程啟動過程解析

    這篇文章主要為大家介紹了SystemServer進程啟動過程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • SpringBoot?中使用?Validation?校驗參數的方法詳解

    SpringBoot?中使用?Validation?校驗參數的方法詳解

    Validation?是用于檢查程序代碼中參數的有效性的框架,作為?Spring?框架中的一個參數校驗工具,集成在?spring-context?包中,這篇文章主要介紹了SpringBoot?中使用?Validation?校驗參數,需要的朋友可以參考下
    2022-05-05

最新評論