web-dev-qa-db-ja.com

ジャクソン-ZonedDateTimeをISO 8601文字列にシリアル化

ZonedDateTimeISO 8601準拠の文字列にシリアル化したい、たとえば:
2018-02-14T01:01:02.074+0100

私は以下を試しました:

@JsonProperty("@timestamp")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private ZonedDateTime timestamp;

ただし、残念ながら、正しい結果が得られず、ZonedDateTimeとそのすべてのフィールドがシリアル化されます。

すでにあなたの助けをありがとう!

12
JDC

Java 8.で導入された日付と時刻クラスのジャクソンモジュールを必ず含めて登録してください。

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.8.10</version>
</dependency>

必要に応じて:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());

補足:注釈なしで日付をタイムスタンプとしてシリアル化しないようにObjectMapperを構成するだけで、目的の形式を実現することもできます。例えば。

mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
19