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

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

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

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

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

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

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

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

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

此時(shí)前端就會(huì)按照我們?cè)O(shè)置的格式顯示

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

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

首先介紹Jackson包中的ObjectMapper.

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

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

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

那么我們可以在這個(gè)類中做一點(diǎn)文章,

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

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

下面我們就通過這兩步實(shí)現(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();
        //收到未知屬性時(shí)不報(bào)異常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化時(shí),屬性不存在的兼容處理
        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)));

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

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

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

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

binggo,就是這里. 我們?cè)谂渲脭r截器的配置類的時(shí)候我們會(huì)發(fā)現(xiàn), WebMvcConfigurationSupport 這個(gè)類有很多方法,

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

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

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

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

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

代碼如下:

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

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

因?yàn)槲覀兊南⑥D(zhuǎn)換器是第一個(gè)消息轉(zhuǎn)換器,如果客戶端要求返回JSON數(shù)據(jù)Spring MVC會(huì)選擇我們的這個(gè)消息轉(zhuǎn)換器進(jìn)行對(duì)象序列化。

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

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

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

我們?cè)诜祷厍岸藬?shù)據(jù)的時(shí)候可能會(huì)因?yàn)閷?shí)體類的設(shè)計(jì),或者不想讓前端能夠看到該數(shù)據(jù),此時(shí)就需要通過一些手段對(duì)數(shù)據(jù)進(jìn)行一些處理, 還是兩種方式.

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

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

相關(guān)文章

  • BufferedInputStream(緩沖輸入流)詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    BufferedInputStream(緩沖輸入流)詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了BufferedInputStream緩沖輸入流的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java實(shí)現(xiàn)Base64加密解密算法

    java實(shí)現(xiàn)Base64加密解密算法

    Base64用來將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法,這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Base64加密解密算法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Springboot集成Protobuf的流程步驟

    Springboot集成Protobuf的流程步驟

    在以往的項(xiàng)目中進(jìn)行網(wǎng)絡(luò)通信和數(shù)據(jù)交換的應(yīng)用場(chǎng)景中,最經(jīng)常使用的技術(shù)便是json或xml,但是今天在介紹一個(gè)Google的力作protobuf作為數(shù)據(jù)交換格式,文中給大家介紹了Springboot集成Protobuf的流程步驟,需要的朋友可以參考下
    2024-03-03
  • Gauva使用ListenableFuture介紹說明

    Gauva使用ListenableFuture介紹說明

    并發(fā)是一個(gè)困難問題,但是通過強(qiáng)大和強(qiáng)大的抽象能夠顯著的簡(jiǎn)化工作。為了簡(jiǎn)化問題,Gauva使用ListenableFuture擴(kuò)展了JDK的Future接口,這篇文章主要介紹了Gauva使用ListenableFuture
    2023-01-01
  • Java spring事務(wù)及事務(wù)不生效的原因詳解

    Java spring事務(wù)及事務(wù)不生效的原因詳解

    在日常編碼過程中常常涉及到事務(wù),在前兩天看到一篇文章提到了Spring事務(wù),那么在此總結(jié)下在Spring環(huán)境下事務(wù)失效的幾種原因
    2021-09-09
  • SpringBoot MockMvc單元測(cè)試的示例代碼

    SpringBoot MockMvc單元測(cè)試的示例代碼

    這篇文章主要介紹了SpringBoot MockMvc單元測(cè)試的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java結(jié)構(gòu)型設(shè)計(jì)模式中的適配器模式與橋接模式解析

    Java結(jié)構(gòu)型設(shè)計(jì)模式中的適配器模式與橋接模式解析

    這篇文章主要介紹了Java結(jié)構(gòu)型設(shè)計(jì)模式中的適配器模式與橋接模式,結(jié)構(gòu)型設(shè)計(jì)模式是從程序的結(jié)構(gòu)上解決模塊之間的耦合問題,需要的朋友可以參考下
    2016-02-02
  • 教你使用idea搭建ssm詳細(xì)教程(Spring+Spring Mvc+Mybatis)

    教你使用idea搭建ssm詳細(xì)教程(Spring+Spring Mvc+Mybatis)

    今天教大家使用idea搭建ssm詳細(xì)教程(Spring+Spring Mvc+Mybatis),文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)使用idea的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java并發(fā)教程之volatile關(guān)鍵字詳解

    Java并發(fā)教程之volatile關(guān)鍵字詳解

    這篇文章主要給大家介紹了關(guān)于Java并發(fā)教程之volatile關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Springboot攔截filter中異常的處理

    Springboot攔截filter中異常的處理

    SpringBoot提供了全局異常處理機(jī)制可以攔截所有異常,包括Filter中的異常,本文主要介紹了Springboot攔截filter中異常的處理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11

最新評(píng)論