SpringBoot
是為了簡化Spring
應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程
為什么要用新的日期類型
在 JDK8
中,一個新的重要特性就是引入了全新的時間和日期API,它被收錄在 java.time
包中。借助新的時間和日期API可以以更簡潔的方法處理時間和日期。
在 JDK8
之前,所有關於時間和日期的API存在以下幾個缺陷,也正是這些缺陷,出現了很多第三方的日期處理框架,例如 Joda-Time
,date4j
等開源項目。但是,Java 需要一套標准的用於處理時間和日期的框架,於是乎在 JDK8
中引入了新的日期API。遵循 JSR-310
規范的實現,而 Joda-Time
框架的作者正是 JSR-310
的規范的倡導者,所以用過 Joda-Time
的對新日期API也不會陌生。
缺陷
- 之前的
java.util.Date
和java.util.Calendar
類易用性差,不支持時區,且非線程安全的; - 日期格式化類
java.text.DateFormat
是一個抽象類,使用時需要先實例化一個SimpleDateFormat
對象來處理日期格式化,同時DateFormat
也不是線程安全的,這意味着如果你在多線程程序中調用同一個DateFormat
對象,會得到意想不到的結果。 - 對日期的計算方式繁瑣,而且容易出錯,因為月份是從0開始的,從 Calendar 中獲取的月份需要加一才能表示當前月份。
為什么要格式化
說了這么多,和 Spring Boot
有什么關系呢?不要急,待我娓娓道來!
- 格式化前:{“payTime”:”2018-09-30T09:51:56.77”}
- 格式化后:{“payTime”:”2018-09-30 09:51:56”}
都知道我們國人習慣 yyyy-MM-dd HH:mm:ss
這種格式的日期,但奈何框架是歪國大佬們寫的,他們的日期格式與我們相差甚遠,好在 Spring Boot
提供了 spring.jackson.date-format
,奈何它只能格式化 java.util.Date
。那么解決辦法是什么呢?
導入依賴
首先一個 WEB
項目,必不可少的依賴就是 spring-boot-starter-web
了,一路學習下來的小伙伴們肯定都熟記於心了
1 |
<dependency> |
配置文件
由於 spring.jackson.date-format
對新的日期類型不在有效果,所以這里0配置文件了
方案一(強烈推薦)
只需要定義一個配置類,在里面定義兩個 Bean
即可完成全局日期格式化處理,這種方式也是本人現在使用的,同時還兼顧了 Date
和 LocalDateTime
並存
1 |
package com.battcn.config; |
方案二(強烈推薦)
有時候,我們對日期格式要做特殊的處理,全局的格式化方式無法滿足我們需求是,使用該方案是非常好的選擇,通過 @JsonFormat
注解我們可以更為精准的為日期字段格式化,它也是優先級最高的
1 |
public class Order { |
方案三(可選)
其實和第一種類似,只不過第一種的寫法更加優雅簡潔,如果有多種類型需要做統一格式化處理,這種方案也不是不可以考慮
1 |
package com.battcn.config; |
控制層
定義了一個很簡單的響應
1 |
package com.battcn.controller; |
主函數
1 |
package com.battcn; |
測試
完成准備事項后,啟動Chapter28Application
,訪問 http://localhost:8080/orders 即可看到格式化后的日期啦…