使用Jackson 進行LocalDate 序列化
使用Java 8 的LocalDate 欄位和JSON 序列化時,標準Java 8 註解可能不總是是足夠。為了解決這個問題,提出了使用 Jackson 模組和 ContextResolver 的自訂解決方案。
Jackson 提供了 JSR310Module(現已替換為 JavaTimeModule)來處理 Java 8 日期和時間類型的序列化和反序列化。要使用它,請按照以下步驟操作:
將依賴項新增至您的專案:
<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; } }
使用這種🎜>使用這種🎜>
使用這種🎜>使用這種方法,當使用Jackson 進行JSON 處理時,LocalDate 欄位將會正確序列化和反序列化。該解決方案還解決了透過將 write-date-as-timestamp 設為 false 來防止日期序列化為時間戳記的要求。
注意: JSR310Module 已在 Jackson 版本 2.7 及更高版本中棄用。建議改用 JavaTimeModule,它是同一依賴項的一部分。以上是如何在 Java 中使用 Jackson 序列化和反序列化 LocalDate?的詳細內容。更多資訊請關注PHP中文網其他相關文章!