ホームページ > Java > &#&チュートリアル > Spring Data JPA JSON シリアル化で ZonedDateTime を ISO 8601 にフォーマットする方法は?

Spring Data JPA JSON シリアル化で ZonedDateTime を ISO 8601 にフォーマットする方法は?

DDD
リリース: 2024-12-13 18:16:18
オリジナル
802 人が閲覧しました

How to Format ZonedDateTime to ISO 8601 in Spring Data JPA JSON Serialization?

Spring Data JPA: JSON シリアル化での ZonedDateTime のフォーマット

Spring Data JPA は、Java 8 の日付および時刻型のデータベース列へのマッピングをサポートしています。ただし、ZonedDateTime のデフォルトの JSON シリアル化形式では、詳細な出力が生成される可能性があります。この記事では、JSON シリアル化中に ZonedDateTime を ISO 形式にフォーマットする方法について説明します。

問題ステートメント

iso = DateTimeFormat.ISO.DATE_TIME で @DateTimeFormat アノテーションを使用しているにもかかわらず、ZonedDateTime の JSON シリアル化では依然として細かいオブジェクト。目標は、ZonedDateTime をより簡潔な ISO 形式にフォーマットすることです。

解決策

JSON シリアル化の問題は、Spring Data JPA で JSON シリアル化を処理する Jackson が原因である可能性があります。これを解決するには、Java 8 日時 API 用の Jackson のモジュールを追加する必要があります。

依存関係の追加

次の依存関係を pom.xml に追加します:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.6.0</version>
</dependency>
ログイン後にコピー

モジュールの登録

依存関係を追加した後、JavaTimeModule を次のコマンドで登録します。 Jackson:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
ログイン後にコピー

フォーマッタのカスタマイズ

ZonedDateTime getter メソッドの @JsonFormat アノテーションを使用して、シリアル化中に日付形式をカスタマイズできます。例:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public ZonedDateTime getTime() {
    return time;
}
ログイン後にコピー

これにより、ZonedDateTime が ISO 形式にフォーマットされます: yyyy-MM-dd'T'HH:mm:ss.SSSZ.

Example

次の例は、JavaTimeModule と形式の使用法を示しています。カスタマイズ:

public static void main(String[] args) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    System.out.println(objectMapper.writeValueAsString(new Entity()));
}

static class Entity {
    ZonedDateTime time = ZonedDateTime.now();

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    public ZonedDateTime getTime() {
        return time;
    }
}
ログイン後にコピー

この例の出力は次のようになります:

{"time":"2015-07-25T23:09:01.795+0700"}
ログイン後にコピー

結論

Jackson の JavaTimeModule を追加し、@JsonFormat アノテーションを使用することで、 ZonedDateTime の JSON シリアル化形式により、不要なデータの転送を防ぎ、パフォーマンスを最適化し、JSON のサイズを削減します。ペイロード。

以上がSpring Data JPA JSON シリアル化で ZonedDateTime を ISO 8601 にフォーマットする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート