1. 개요

이 예제에서는 Jackson에서 @JsonFormat 을 사용하는 방법을 보여줍니다 .

@JsonFormat 은 JSON 출력에 대한 필드 및/또는 속성의 형식을 지정하는 방법을 지정하는 데 사용하는 Jackson 어노테이션입니다.

특히 이 어노테이션을 사용 하면 SimpleDateFormat 형식 에 따라 날짜달력 값의 형식을 지정하는 방법을 지정할 수 있습니다 .

2. 메이븐 의존성

@JsonFormatjackson-databind 패키지에 정의되어 있으므로 다음 Maven 의존성이 필요합니다.

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.3</version>
</dependency>

3. 시작하기

3.1. 기본 형식 사용

사용자를 나타내는 클래스와 함께 @JsonFormat 어노테이션 을 사용하는 개념을 시연하는 것으로 시작하겠습니다 .

어노테이션의 세부 사항을 설명하고 싶기 때문에 User 객체는 요청 시 생성되고(데이터베이스에서 저장되거나 로드되지 않음) JSON으로 직렬화됩니다.

public class User {
    private String firstName;
    private String lastName;
    private Date createdDate = new Date();

    // standard constructor, setters and getters
}

이 코드 예제를 빌드하고 실행하면 다음 출력이 반환됩니다.

{"firstName":"John","lastName":"Smith","createdDate":1482047026009}

보시다시피 createdDate 필드는 날짜 필드 에 사용되는 기본 형식인 epoch 이후의 밀리초 수로 표시 됩니다.

3.2. Getter에서 어노테이션 사용

이제 @JsonFormat 을 사용하여 createdDate 필드 를 직렬화하는 형식을 지정합니다 .

이 변경 사항에 대해 업데이트된 User 클래스를 살펴보겠습니다. 날짜 형식을 지정하기 위해 표시된 대로 createdDate 필드에 어노테이션을 답니다.

패턴 인수에 사용되는 데이터 형식 은 SimpleDateFormat 에 의해 지정됩니다 .

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ")
private Date createdDate;

이 변경 사항이 적용되면 프로젝트를 다시 빌드하고 실행합니다.

결과는 다음과 같습니다.

{"firstName":"John","lastName":"Smith","createdDate":"2016-12-18@07:53:34.740+0000"}

여기 에서는 @JsonFormat 어노테이션 을 사용 하여 지정된 SimpleDateFormat 형식을 사용하여 createdDate 필드의 형식을 지정했습니다.

위의 예는 필드에서 어노테이션을 사용하는 방법을 보여줍니다. getter 메서드(속성)에서도 사용할 수 있습니다.

예를 들어 호출 시 계산되는 속성이 있을 수 있습니다. 이 경우 getter 메서드에 어노테이션을 사용할 수 있습니다.

인스턴트의 날짜 부분만 반환하도록 패턴도 변경했습니다.

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
public Date getCurrentDate() {
    return new Date();
}

결과는 다음과 같습니다.

{ ... , "currentDate":"2016-12-18", ...}

3.3. 로케일 지정

날짜 형식 지정 외에도 직렬화를 위한 로케일도 지정할 수 있습니다.

이 매개변수를 지정하지 않으면 기본 로케일로 직렬화가 수행됩니다.

@JsonFormat(
  shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ", locale = "en_GB")
public Date getCurrentDate() {
    return new Date();
}

3.4. 모양 지정

모양 이 JsonFormat.Shape.NUMBER설정된 @JsonFormat 을 사용하면 Date 유형 에 대한 기본 출력 이 epoch 이후의 밀리초 수로 표시 됩니다.

매개변수 패턴 은 이 경우에 적용할 수 없으며 무시됩니다.

@JsonFormat(shape = JsonFormat.Shape.NUMBER)
public Date getDateNum() {
    return new Date();
}

출력을 살펴보겠습니다.

{ ..., "dateNum":1482054723876 }

4. 결론

요약하면 @JsonFormat 을 사용하여 날짜달력 유형 의 출력 형식을 제어합니다 .

위에 표시된 샘플 코드는 GitHub에서 사용할 수 있습니다 .

Jackson footer banner