最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中處理日期的兩種方式小結(jié)

 更新時間:2023年04月19日 09:19:58   作者:yfs1024  
本文主要介紹了SpringBoot中處理日期的兩種方式小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在Spring Boot中,我們通常會使用Jackson來序列化和反序列化Java對象到JSON。在進行日期序列化時,我們需要指定日期格式,否則Jackson會使用默認(rèn)格式,這可能不是我們想要的。要指定日期格式,有兩種方式:

如果沒有處理按照默認(rèn)的結(jié)果如下圖: 所以我們需要通過一些手段來對日期進行處理.這里通過兩個方式來解決.

方式一: 使用注解 (不推薦)

我們可以在實體類日期屬性上添加@JsonFormat(),并且通過參數(shù)pattern,來格式化我們的想要的格式實例如下:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;

此時前端就會按照我們設(shè)置的格式顯示

對于上面的方法,需要我們對每一個向前端顯示的日期都加上@JSONFormat這個注解,所以十分的麻煩,于是就有了方式二.通過全局異常處理.

方式二 自定義消息轉(zhuǎn)換器

首先介紹Jackson包中的ObjectMapper.

ObjectMapper是Jackson庫中的一個類,它的主要作用是:

  • 將Java對象序列化為JSON/XML等格式;
  • 將JSON/XML等格式的數(shù)據(jù)反序列化為Java對象。

所以,它是實現(xiàn)對象與JSON/XML互相轉(zhuǎn)換的關(guān)鍵。

那么我們可以在這個類中做一點文章,

(1)在構(gòu)造器中自定義日期轉(zhuǎn)換的格式. ----也就相當(dāng)于改變他的屬性的初始化值.

(2)通過配置讓SpringMVC在調(diào)用的時候不再調(diào)用Jackson自定義的ObjectMapper,使用我們自定的格式

下面我們就通過這兩步實現(xiàn).

第一步: 繼承ObjectMapper,重寫構(gòu)造方法,自定義序列化方式

public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知屬性時不報異常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化時,屬性不存在的兼容處理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注冊功能模塊 例如,可以添加自定義序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

第二步: 讓Spring使用我們的自定的消息轉(zhuǎn)換器

這里我們就要想了,我們應(yīng)該怎么處理呢?在哪配置?配置文件? 配置類?

首先我們可以想到,系統(tǒng)中少不了的是攔截器,而攔截器的是不是有一個配置攔截規(guī)則的配置類.那么我們能不能再這里配置.

binggo,就是這里. 我們在配置攔截器的配置類的時候我們會發(fā)現(xiàn), WebMvcConfigurationSupport 這個類有很多方法,

有我們常用的protected void addInterceptors(InterceptorRegistry registry) { ... } 配置攔截規(guī)則

public void addResourceHandlers(ResourceHandlerRegistry registry) {... } 配置資源處理

等等有很多配置方法.而我們的消息轉(zhuǎn)換器也在其中

protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {...}

通過在這個方法中配置相關(guān)信息,即可改變Spring默認(rèn)指定的規(guī)則,而使用我們自己定義的規(guī)則(組件)

代碼如下:

@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    log.info("擴展消息轉(zhuǎn)換器...");
    //創(chuàng)建一個消息轉(zhuǎn)換器對象,注意不要導(dǎo)錯包是Jackson2Http
    MappingJackson2HttpMessageConverter converter =  new MappingJackson2HttpMessageConverter();
    //需要為消息轉(zhuǎn)換器設(shè)置一個對象轉(zhuǎn)換器,對象轉(zhuǎn)換器可以將Java對象序列化為json數(shù)據(jù)
    converter.setObjectMapper(new JacksonObjectMapper());
    //將自己的消息轉(zhuǎn)化器加入容器中
    converters.add(0, converter);
}
  • 創(chuàng)建了一個MappingJackson2HttpMessageConverter,這是Spring MVC集成Jackson的消息轉(zhuǎn)換器,可以將Java對象序列化/反序列化為JSON。
  • 為消息轉(zhuǎn)換器指定使用我們的JacksonObjectMapper, 用來將Java對象序列化/反序列化為JSON。
  • 將剛才創(chuàng)建的MappingJackson2HttpMessageConverter對象加入到消息轉(zhuǎn)換器列表converters中,并且加入到第一個位置,讓其優(yōu)先使用

由于我們重寫了extendMessageConverters()方法,Spring MVC會調(diào)用這個方法并使用我們添加的消息轉(zhuǎn)換器。所以,我們添加的MappingJackson2HttpMessageConverter會生效,并使用我們自定義的JacksonObjectMapper(),用來處理對象與JSON之間的序列化和反序列化。

因為我們的消息轉(zhuǎn)換器是第一個消息轉(zhuǎn)換器,如果客戶端要求返回JSON數(shù)據(jù)Spring MVC會選擇我們的這個消息轉(zhuǎn)換器進行對象序列化。

從而實現(xiàn)了對系統(tǒng)所有的日期按照我們要求的格式進行序列化.

此時前端數(shù)據(jù)也就是我們設(shè)置的格式.不在是Jackson默認(rèn)的格式.

既然提到了日期,與之類似的還有一個對敏感信息的處理:

我們在返回前端數(shù)據(jù)的時候可能會因為實體類的設(shè)計,或者不想讓前端能夠看到該數(shù)據(jù),此時就需要通過一些手段對數(shù)據(jù)進行一些處理, 還是兩種方式.

  • 在返回之前對數(shù)據(jù)的值進行替換, 調(diào)用set方法設(shè)置為 垃圾信息, 比如 setPassword(“******”)
  • 是在實體類中使用Jackson提供的 @JsonIgnore 注解也可以解決,作用是忽略字段的序列化和反序列化。

到此這篇關(guān)于SpringBoot中處理日期的兩種方式小結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot 處理日期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 中EasyExcel的使用方式

    Java 中EasyExcel的使用方式

    這篇文章主要介紹了Java 中EasyExcel的使用方式,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Java連接Redis全過程講解

    Java連接Redis全過程講解

    這篇文章主要介紹了Java連接Redis全過程講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring?Bean名稱不會被代理的命名技巧

    Spring?Bean名稱不會被代理的命名技巧

    Spring Bean一些使用小細節(jié)就是在不斷的源碼探索中逐步發(fā)現(xiàn)的,今天就來和小伙伴們聊一下通過 beanName 的設(shè)置,可以讓一個 bean 拒絕被代理
    2023-11-11
  • Java基于IO流實現(xiàn)登錄和注冊功能

    Java基于IO流實現(xiàn)登錄和注冊功能

    這篇文章主要為大家詳細介紹了Java基于IO流實現(xiàn)登錄和注冊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java中toString函數(shù)的使用示例代碼

    Java中toString函數(shù)的使用示例代碼

    toString()函數(shù)用于將當(dāng)前對象以字符串的形式返回,比如我定義了一個User類,創(chuàng)建了一個user對象,然后使用相應(yīng)命令去打印user對象,本文結(jié)合示例代碼介紹了toString函數(shù)的使用,需要的朋友可以參考下
    2024-02-02
  • 設(shè)計模式之構(gòu)建(Builder)模式 建造房子實例分析

    設(shè)計模式之構(gòu)建(Builder)模式 建造房子實例分析

    構(gòu)建模式主要用來針對復(fù)雜產(chǎn)品生產(chǎn),分離部件構(gòu)建細節(jié),以達到良好的伸縮性,考慮到設(shè)計模式來源于建筑學(xué),因此舉一個建造房子的例子,需要的朋友可以參考下
    2012-12-12
  • Java使用反射來獲取泛型信息示例

    Java使用反射來獲取泛型信息示例

    這篇文章主要介紹了Java使用反射來獲取泛型信息,結(jié)合實例形式分析了java基于反射操作泛型信息的相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2019-07-07
  • Java接入通義千問的簡單方法示例

    Java接入通義千問的簡單方法示例

    ? 通義千問是阿里云開發(fā)的大語言模型(Large language Model )LLM,旨在提供廣泛的知識和普適性,可以理解和回答各領(lǐng)域中的問題,這篇文章主要給大家介紹了關(guān)于Java接入通義千問的簡單方法,需要的朋友可以參考下
    2024-02-02
  • 使用Spring Boot搭建Java web項目及開發(fā)過程圖文詳解

    使用Spring Boot搭建Java web項目及開發(fā)過程圖文詳解

    這篇文章主要介紹了使用Spring Boot搭建Java web項目及開發(fā)過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Mapstruct?@Mapper?@Mapping?使用小結(jié)

    Mapstruct?@Mapper?@Mapping?使用小結(jié)

    這篇文章主要介紹了Mapstruct?@Mapper?@Mapping使用小結(jié),他們用于各個對象實體間的相互轉(zhuǎn)換,例如數(shù)據(jù)庫底層實體轉(zhuǎn)為頁面對象,Model?轉(zhuǎn)為?DTO,?DTO?轉(zhuǎn)為其他中間對象,?VO?等等,相關(guān)轉(zhuǎn)換代碼為編譯時自動產(chǎn)生的新文件和代碼,需要的朋友可以參考下
    2023-09-09

最新評論

阜新| 贺兰县| 黄骅市| 微山县| 闽清县| 东海县| 兴安盟| 昌乐县| 乐东| 万山特区| 赤水市| 平度市| 吕梁市| 红安县| 临朐县| 四川省| 灌云县| 孟津县| 嵩明县| 高要市| 阳西县| 青铜峡市| 宁波市| 枝江市| 泰兴市| 根河市| 格尔木市| 蒙城县| 金沙县| 堆龙德庆县| 江西省| 大田县| 松溪县| 太仓市| 杭锦后旗| 阜新市| 上杭县| 渭源县| 尤溪县| 塔城市| 同心县|