Jackson による LocalDate シリアル化
Java 8 の LocalDate フィールドと JSON シリアル化を使用する場合、標準の Java 8 アノテーションが常に十分であるとは限りません。これに対処するために、Jackson のモジュールと ContextResolver を使用したカスタム ソリューションが紹介されています。
Jackson は、Java 8 の日付と時刻型のシリアル化と逆シリアル化を処理するための JSR310Module (現在は JavaTimeModule に置き換えられています) を提供しています。これを利用するには、次の手順に従います。
依存関係をプロジェクトに追加します。
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.4.0</version> </dependency>
ContextResolver を作成して、ObjectMapper を構成します。 LocalDate およびその他の Java 8 日付と時刻の処理タイプ:
@Provider public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> { private final ObjectMapper MAPPER; public ObjectMapperContextResolver() { MAPPER = new ObjectMapper(); MAPPER.registerModule(new JavaTimeModule()); MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); } @Override public ObjectMapper getContext(Class<?> type) { return MAPPER; } }
リソース クラスで ContextResolver を使用して、エンドポイントの ObjectMapper をカスタマイズします:
@Path("person") public class LocalDateResource { @GET @Produces(MediaType.APPLICATION_JSON) public Response getPerson() { Person person = new Person(); person.birthDate = LocalDate.now(); return Response.ok(person).build(); } @POST @Consumes(MediaType.APPLICATION_JSON) public Response createPerson(Person person) { return Response.ok( DateTimeFormatter.ISO_DATE.format(person.birthDate)).build(); } public static class Person { public LocalDate birthDate; } }
このアプローチでは, JSON 処理に Jackson を使用すると、LocalDate フィールドは適切にシリアル化および逆シリアル化されます。このソリューションでは、write-date-as-timestamp を false に設定することで、日付がタイムスタンプとしてシリアル化されないようにする要件にも対応しています。
注: JSR310Module は、Jackson バージョン 2.7 以降では非推奨になりました。 。代わりに、同じ依存関係の一部である JavaTimeModule を使用することをお勧めします。
以上がJava で Jackson を使用して LocalDate をシリアル化および逆シリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。