> Java > java지도 시간 > Jackson을 사용하여 Java 8의 LocalDate 형식을 올바르게 지정하는 방법은 무엇입니까?

Jackson을 사용하여 Java 8의 LocalDate 형식을 올바르게 지정하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-17 17:35:14
원래의
578명이 탐색했습니다.

How to Properly Format Java 8's LocalDate with Jackson?

Java 8에서 Jackson을 사용하여 LocalDate 형식 지정

이 기사에서는 Jackson을 사용하여 java.time.LocalDate 형식을 지정하는 방법을 살펴보겠습니다. Java 8.

문제 설명

언제 Java 8의 LocalDate 필드로 작업할 때 java.util.Date에 사용된 것과 동일한 주석을 사용하려고 하면 원하는 결과가 나오지 않을 수 있습니다.

실패한 시도

@JsonDeserialize(using = LocalDateDeserializer.class)  
@JsonSerialize(using = LocalDateSerializer.class)  
private LocalDate dateOfBirth;
로그인 후 복사

해결책

LocalDate 형식을 올바르게 지정하려면 다음 단계를 수행해야 합니다. 촬영:

  1. jackson-datatype-jsr310 종속성 추가:

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
        <version>2.4.0</version>
    </dependency>
    로그인 후 복사
  2. ObjectMapper용 ContextResolver 만들기:

    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
    import javax.ws.rs.ext.ContextResolver;
    import javax.ws.rs.ext.Provider;
    
    @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;
        }  
    }
    로그인 후 복사
  3. 등록하기 리소스 클래스의 ObjectMapperContextResolver:

    @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;
        }
    }
    로그인 후 복사

테스트

이제 다음 HTTP 요청을 실행하여 형식 지정을 테스트할 수 있습니다.

# Get person
curl -v http://localhost:8080/api/person

# Create person
curl -v -POST -H "Content-Type:application/json" -d "{\"birthDate\":\"2015-03-01\"}" http://localhost:8080/api/person
로그인 후 복사

예상 응답:

{"birthDate":"2015-03-01"}
로그인 후 복사
2015-03-01
로그인 후 복사

위 내용은 Jackson을 사용하여 Java 8의 LocalDate 형식을 올바르게 지정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿