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.
次の例は、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 サイトの他の関連記事を参照してください。