您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“SpringBoot中處理日期的方式有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“SpringBoot中處理日期的方式有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
在Spring Boot中,我們通常會使用Jackson來序列化和反序列化Java對象到JSON。在進行日期序列化時,我們需要指定日期格式,否則Jackson會使用默認格式,這可能不是我們想要的。要指定日期格式,有兩種方式:
如果沒有處理按照默認的結果如下圖: 所以我們需要通過一些手段來對日期進行處理.這里通過兩個方式來解決.
我們可以在實體類日期屬性上添加@JsonFormat(),并且通過參數pattern,來格式化我們的想要的格式實例如下:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime;
此時前端就會按照我們設置的格式顯示
對于上面的方法,需要我們對每一個向前端顯示的日期都加上@JSONFormat這個注解,所以十分的麻煩,于是就有了方式二.通過全局異常處理.
首先介紹Jackson包中的ObjectMapper.
ObjectMapper是Jackson庫中的一個類,它的主要作用是:
將Java對象序列化為JSON/XML等格式;
將JSON/XML等格式的數據反序列化為Java對象。
所以,它是實現對象與JSON/XML互相轉換的關鍵。
那么我們可以在這個類中做一點文章,
(1)在構造器中自定義日期轉換的格式. ----也就相當于改變他的屬性的初始化值.
(2)通過配置讓SpringMVC在調用的時候不再調用Jackson自定義的ObjectMapper,使用我們自定的格式
下面我們就通過這兩步實現.
第一步: 繼承ObjectMapper,重寫構造方法,自定義序列化方式
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使用我們的自定的消息轉換器
這里我們就要想了,我們應該怎么處理呢?在哪配置?配置文件? 配置類?
首先我們可以想到,系統中少不了的是攔截器,而攔截器的是不是有一個配置攔截規則的配置類.那么我們能不能再這里配置.
binggo,就是這里. 我們在配置攔截器的配置類的時候我們會發現, WebMvcConfigurationSupport 這個類有很多方法,
有我們常用的protected void addInterceptors(InterceptorRegistry registry) { ... }
配置攔截規則
public void addResourceHandlers(ResourceHandlerRegistry registry) {... }
配置資源處理
等等有很多配置方法.而我們的消息轉換器
也在其中
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {...}
通過在這個方法中配置相關信息,即可改變Spring默認指定的規則,而使用我們自己定義的規則(組件)
代碼如下:
@Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { log.info("擴展消息轉換器..."); //創建一個消息轉換器對象,注意不要導錯包是Jackson2Http MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); //需要為消息轉換器設置一個對象轉換器,對象轉換器可以將Java對象序列化為json數據 converter.setObjectMapper(new JacksonObjectMapper()); //將自己的消息轉化器加入容器中 converters.add(0, converter); }
創建了一個MappingJackson2HttpMessageConverter,這是Spring MVC集成Jackson的消息轉換器,可以將Java對象序列化/反序列化為JSON。
為消息轉換器指定使用我們的JacksonObjectMapper, 用來將Java對象序列化/反序列化為JSON。
將剛才創建的MappingJackson2HttpMessageConverter對象加入到消息轉換器列表converters中,并且加入到第一個位置,讓其優先使用
由于我們重寫了extendMessageConverters()方法,Spring MVC會調用這個方法并使用我們添加的消息轉換器。所以,我們添加的MappingJackson2HttpMessageConverter會生效,并使用我們自定義的JacksonObjectMapper()
,用來處理對象與JSON之間的序列化和反序列化。
因為我們的消息轉換器是第一個消息轉換器,如果客戶端要求返回JSON數據Spring MVC會選擇我們的這個消息轉換器進行對象序列化。
從而實現了對系統所有的日期按照我們要求的格式進行序列化.
此時前端數據也就是我們設置的格式.不在是Jackson默認的格式.
既然提到了日期,與之類似的還有一個對敏感信息的處理:
我們在返回前端數據的時候可能會因為實體類的設計,或者不想讓前端能夠看到該數據,此時就需要通過一些手段對數據進行一些處理, 還是兩種方式.
在返回之前對數據的值進行替換, 調用set方法設置為 垃圾信息
, 比如 setPassword(“******”)
是在實體類中使用Jackson提供的 @JsonIgnore
注解也可以解決,作用是忽略字段的序列化和反序列化。
讀到這里,這篇“SpringBoot中處理日期的方式有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。