> Java > java지도 시간 > Spring 데이터 JPA JSON 직렬화에서 ZonedDateTime을 ISO 8601로 형식화하는 방법은 무엇입니까?

Spring 데이터 JPA JSON 직렬화에서 ZonedDateTime을 ISO 8601로 형식화하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-13 18:16:18
원래의
776명이 탐색했습니다.

How to Format ZonedDateTime to ISO 8601 in Spring Data JPA JSON Serialization?

Spring Data JPA: JSON 직렬화에서 ZonedDateTime 형식 지정

Spring Data JPA는 Java 8 날짜 및 시간 유형을 데이터베이스 열에 매핑하는 것을 지원합니다. 그러나 ZonedDateTime의 기본 JSON 직렬화 형식은 자세한 출력을 생성할 수 있습니다. 이 문서에서는 JSON 직렬화 중에 ZonedDateTime을 ISO 형식으로 형식화하는 방법을 살펴봅니다.

문제 설명

iso = DateTimeFormat.ISO.DATE_TIME과 함께 @DateTimeFormat 주석을 사용함에도 불구하고 ZonedDateTime의 JSON 직렬화는 여전히 상세한 개체. 목표는 ZonedDateTime을 보다 간결한 ISO 형식으로 형식화하는 것입니다.

해결책

JSON 직렬화 문제는 Spring Data JPA에서 JSON 직렬화를 처리하는 Jackson으로 인해 발생할 가능성이 높습니다. 이 문제를 해결하려면 Java 8 날짜 및 시간 API용 Jackson 모듈을 추가해야 합니다.

종속성 추가

pom.xml에 다음 종속성을 추가하세요.

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.6.0</version>
</dependency>
로그인 후 복사

모듈 등록

종속성을 추가한 후 JavaTimeModule을 등록합니다. Jackson:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
로그인 후 복사

포맷 사용자 정의

ZonedDateTime getter 메소드의 @JsonFormat 주석을 사용하여 직렬화 중에 날짜 형식을 사용자 정의할 수 있습니다. 예:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public ZonedDateTime getTime() {
    return time;
}
로그인 후 복사

이렇게 하면 ZonedDateTime이 ISO 형식(yyyy-MM-dd'T'HH:mm:ss.SSSZ)으로 지정됩니다.

다음 예는 JavaTimeModule의 사용법과 형식을 보여줍니다. 사용자 정의:

public static void main(String[] args) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    System.out.println(objectMapper.writeValueAsString(new Entity()));
}

static class Entity {
    ZonedDateTime time = ZonedDateTime.now();

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    public ZonedDateTime getTime() {
        return time;
    }
}
로그인 후 복사

이 예제의 출력은 다음과 같습니다.

{"time":"2015-07-25T23:09:01.795+0700"}
로그인 후 복사

결론

Jackson의 JavaTimeModule을 추가하고 @JsonFormat 주석을 사용하면 ZonedDateTime의 JSON 직렬화 형식과 불필요한 데이터 전송을 방지하여 성능을 최적화하고 JSON 크기를 줄입니다. 페이로드.

위 내용은 Spring 데이터 JPA JSON 직렬화에서 ZonedDateTime을 ISO 8601로 형식화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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