知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 中格式化 JSON 日期

JSON,Spring Boot
HongKong
6
09:52 PM · Dec 05 ,2025

1. 概述

本教程將演示如何在 Spring Boot 應用程序中格式化 JSON 日期字段。

我們將探索使用 Jackson 的各種方法,用於格式化日期,而 Spring Boot 默認使用 Jackson 作為其 JSON 處理器。

2. 使用 @JsonFormatDate 字段上

2.1. 設置格式

我們可以使用@JsonFormat註解來格式化特定字段

public class Contact {

    // other fields

    @JsonFormat(pattern="yyyy-MM-dd")
    private LocalDate birthday;
     
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastUpdate;

    // standard getters and setters

}

生日 字段中,我們使用一種渲染僅顯示日期的模式,而在 最後更新 字段中,我們還包含時間。

我們使用了 Java 8 日期類型,這些類型對於處理時間類型非常方便。

當然,如果我們需要使用遺留類型,如 java.util.Date,我們可以使用相同的註解:

public class ContactWithJavaUtilDate {

     // other fields

     @JsonFormat(pattern="yyyy-MM-dd")
     private Date birthday;
     
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date lastUpdate;

     // standard getters and setters
}

最後,讓我們來看一下使用帶有給定日期格式的<em>@JsonFormat</em>生成的輸出:

{
    "birthday": "2019-02-03",
    "lastUpdate": "2019-02-03 10:08:02"
}

如我們所見,使用 @JsonFormat 註解是一種格式化特定日期字段的絕佳方法。

但是,我們只應在需要為特定字段進行格式化時使用它。 如果我們希望在應用程序中對所有日期採用通用的格式,則有更好的方法可以實現這一點,我們稍後將看到。

2.2. 設置時區

如果需要使用特定的時區,我們可以設置 <em>JsonFormat</em> 屬性中的 <em>timezone</em> 屬性:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="Europe/Zagreb")
private LocalDateTime lastUpdate;

如果類型本身已經包含時區信息,例如使用 java.time.ZonedDatetime,則我們無需再使用它。

3. 配置默認格式

雖然@JsonFormat 本身功能強大,但硬編碼格式和時區可能會在未來帶來問題。

如果我們想為應用程序中的所有日期配置默認格式,一種更靈活的方法是在 application.properties 中進行配置

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

如果我們在JSON日期中使用特定的時區,也有相應的屬性:

spring.jackson.time-zone=Europe/Zagreb

雖然設置默認格式的方式很方便快捷,但這種方法存在一個缺點。不幸的是,它不支持 Java 8 的日期類型,例如 LocalDateLocalDateTime。我們只能將其用於格式化 java.util.Datejava.util.Calendar 類型字段。儘管如此,我們很快就會看到希望。

4. 自定義 Jackson 的 ObjectMapper

因此,如果我們想要使用 Java 8 的日期類型設置默認日期格式,我們需要查看創建 Jackson2ObjectMapperBuilderCustomizer Bean 的過程:

@Configuration
public class ContactAppConfig {

    private static final String dateFormat = "yyyy-MM-dd";
    private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
        return builder -> {
            builder.simpleDateFormat(dateTimeFormat);
            builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
            builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));
        };
    }

}

上述示例展示瞭如何在我們的應用程序中配置默認格式。我們需要定義一個 Bean 並覆蓋其 customize 方法來設置所需的格式。

儘管這種方法看起來有些繁瑣,但它既適用於 Java 8 及其舊版本的日期類型。

結論

在本文中,我們探討了在 Spring Boot 應用程序中格式化 JSON 日期的多種方法。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.