Spring MVC 接收 LocalDate、LocalTime 和 LocalDateTime Java 8 時間類型參數


      使用 Spring MVC 時,很多業務場景下 Controller 需要接收日期時間參數。一個簡單的做法是使用 String 接收日期時間字符串(例如:2020-01-29),然后在代碼中將其轉換成 Java 8 的日期時間類型或 java.util.Date 類型。這種方法雖然簡單,但是當有多個 Controller 接收日期參數時,這種方法就顯得有些繁瑣了。

      另一個做法是使用以下兩個 Spring 提供的注解,可以很好地滿足上述需求。

org.springframework.web.bind.annotation.RequestParam
org.springframework.format.annotation.DateTimeFormat

      RequestParam 比較常見,用於標注 Controller 中方法的參數;DateTimeFormat 用於聲明一個對象屬性或者方法參數會被格式化為日期或時間。兩個注解結合使用時,Spring 會調用 FormattingConversionService.convert(Object, TypeDescriptor, TypeDescriptor) 將日期時間字符串轉換成日期時間類型。

      示例如下:

      一、將 2020-01-29 轉換成 LocalDate;

      二、將 12:25:30 轉換成 LocalTime;

      三、將 2020-01-29 12:25:30 轉換成 LocalDateTime。

 1 @RestController
 2 @RequestMapping("/test")
 3 public class TestController {
 4 
 5     @GetMapping("/date")
 6     public LocalDate showDate(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date) {
 7         return date;
 8     }
 9 
10     @GetMapping("/time")
11     public LocalTime showTime(@RequestParam @DateTimeFormat(pattern = "HH:mm:ss") LocalTime time) {
12         return time;
13     }
14     @GetMapping("/dateTime")
15     public LocalDateTime showDateTime(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime dateTime) {
16         return dateTime;
17     }
18 }

 

       第 1 個方法中的使用的是 iso = DateTimeFormat.ISO.DATE,第 3 個方法中使用的是 pattern = "yyyy-MM-dd HH:mm:ss"。因為第 1 個方法接收的日期字符串符合 ISO 的日期格式 yyyy-MM-dd,所以直接使用使用 DateTimeFormat.ISO 枚舉類中定義好的日期格式。第 3 個方法接收的日期時間字符串不符合 ISO 的日期時間格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX,所以使用 pattern 指定自定義的日期時間格式。第 2 個方法與第 3 個方法原理相同。

      對於任何日期時間格式均可使用 pattern 來指定,所以第 1 個方法中也可以使用 pattern = "yyyy-MM-dd" 指定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM