天天看點

日期時間格式化 @JsonFormat與@DateTimeFormat

最近看到一些介紹這兩個注解的文章,有一些說的不夠準确,是以在此記錄一下

如果要使用 @JsonFormat 這個注解的話,需要在項目中添加 jackson 相關的依賴包

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>
           

如果要使用 @DateTimeFormat 這個注解的話,需要在項目中添加 springframework 相關的依賴包

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.9</version>
</dependency>
           

注:SpringBoot的 spring-boot-start-web 下已經包含了jackson的相關依賴,spring-boot-starter-freemarker 下已經包含了springframework的相關依賴,不需要額外添加,我這裡使用的開發工具是idea,使用Maven Helper這個插件可以看pom依賴關系樹

  • Maven Helper 插件
    日期時間格式化 @JsonFormat與@DateTimeFormat
  • 使用Maven Helper檢視依賴關系樹

    jackson

    日期時間格式化 @JsonFormat與@DateTimeFormat
    springframework
    日期時間格式化 @JsonFormat與@DateTimeFormat

大家可以去這個網站搜尋想要的依賴:https://mvnrepository.com

日期時間格式化 @JsonFormat與@DateTimeFormat
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone = “GMT+8”)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	private LocalDateTime userCreateDate;
           

将後端傳回給前端的日期時間進行格式化,pattern為轉換後的格式,timezone為日期時間的時區

在國内預設時區使用的是CST時區,兩者相差8小時,這裡時區為設定時區為上海時區

@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime userCreateDate;
           
将前端傳給後端的日期時間進行格式化,pattern為轉換後的格式
總結

POST請求,我們一般會用@RequestBody接收JSON對象,如果對象裡面有日期時間類型資料的話,我們可以使用 @JsonFormat 注解進行格式化,它既可以對出參進行格式化,也可以對入參進行格式化

GET請求參數都是拼接在URL後面的,則需要使用@DateTimeFormat對入參進行格式化,放到@RequestBody修飾的對象裡面是無效的