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>
ObjectMapper를 구성하기 위해 ContextResolver를 생성합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!