當前位置:編程學習大全網 - 源碼下載 - SpringBoot中使用@RequestBody時如何自定義需要轉換的日期格式

SpringBoot中使用@RequestBody時如何自定義需要轉換的日期格式

SpringBoot(SpringMVC)序列化和反序列化Json時默認使用的是Jackson(例如使用@RequestBody反序列化前端傳遞過來的Json字符串時),

當我們前端使用Json字符串傳遞到後臺時日期格式可能是時間戳(即long類型的數字),也有可能是日期字符串(如:"yyyy-MM-dd", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss")等等。

如果是時間戳或者是yyyy-MM-dd格式的日期,Jackson會自動識別並且轉換成功,若是yyyy-MM-dd HH:mm:ss這種格式的日期字符串的話,Jackson無法自動轉換成Date類型。

這裏有幾種解決方案,如下:

我們可以在需要被反序列化的日期屬性上添加com.fasterxml.jackson.annotation.JsonFormat註解,如下:

這個註解對於Jackson 序列化以及反序列化均起作用 (即將日期對象序列化成Json時格式為以上指定的格式,將Json反序列化成日期時會按照以上指定的日期格式進行解析,若日期字符串的格式不滿足以上指定的格式將會直接報錯)

方法壹我們只能指定壹種日期的格式,但是我們前端可能傳遞各種類型的日期格式,這個時候我們需要自定義Json日期轉換器,如下在日期類型的屬性上添加com.fasterxml.jackson.databind.annotation.JsonDeserialize註解,如下:

其中DateJacksonConverter類是我們自定義的日期轉換類,這時在 反序列化 時我們可以轉換多種格式的日期,DateJacksonConverter類定義如下:

在該方法中handledType()方法 可以不用重寫。

以上兩種方法都需要在實體類上添加註解,這種方式汙染了實體類,並且要是類太多的話,添加註解是壹個麻煩事,這時我們可以配置全局的日期類型轉換器,如下:

采用這種方式我們自定義的DateJacksonConverter 必須重寫 handledType()方法。

本人推薦采用方式三,這樣不用汙染實體類。

以下附上方式三的xml文件配置(若沒有使用SpringBoot的話):

Tips:

1.關於使用SpringMVC接受前端傳遞過來的QueryParameter數據(即後臺使用@RequestParam接收)或者formdata數據(後臺采用@RequestParam或者直接用對象接收),

若其中存在日期數據,則可以采用以下博客提到的方式進行日期類型的正確轉換:

/u/2608182/blog/713435

2.關於Jackson的基本用法參考: /u/2608182/blog/731403

refer to:

/u/2608182/blog/2877624

  • 上一篇:ucos裏的hook函數是什麽?為什麽要有這些函數?幹什麽用的?
  • 下一篇:送花給客戶賀卡怎麽寫,鮮花寄語大全集
  • copyright 2024編程學習大全網