본문 바로가기

@JsonFormat Pattern 사용법: 날짜, 숫자 포맷팅 및 예제

((!#) 2024. 6. 9.

Jsonformat pattern
Jsonformat pattern

@JsonFormat Pattern 사용법: 날짜, 숫자 포맷팅 및 예제

@JsonFormat은 Jackson 라이브러리를 사용하여 JSON 직렬화 및 역직렬화 시 날짜와 숫자 등의 포맷을 지정할 수 있는 어노테이션입니다. 이 글에서는 @JsonFormat 패턴을 사용하여 LocalDateTime, Timezone, Number 등을 포맷팅하는 방법을 알아보겠습니다.

https://youtu.be/lINCOyvJo_M?si=WAwCtSNkKg4xkSkP

1. @JsonFormat 사용법

@JsonFormat은 주로 날짜와 시간을 특정 형식으로 포맷팅하거나 숫자의 형식을 지정하는 데 사용됩니다. 기본적인 사용법은 다음과 같습니다:

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

위 예제는 LocalDateTime 타입의 변수를 'yyyy-MM-dd HH:mm:ss' 형식의 문자열로 변환합니다.

2. @JsonFormat과 @DateTimeFormat

반응형

@JsonFormat@DateTimeFormat은 유사한 목적을 가지고 있지만, @JsonFormat은 JSON 직렬화 및 역직렬화 시 사용되고, @DateTimeFormat은 스프링의 데이터 바인딩 시 사용됩니다. 두 어노테이션을 함께 사용할 수 있습니다:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime dateTime;

이렇게 하면 JSON 변환 시와 스프링 데이터 바인딩 시 동일한 포맷을 사용할 수 있습니다.

3. @JsonFormat LocalDateTime 포맷팅

@JsonFormat을 사용하여 LocalDateTime을 포맷팅하는 방법은 다음과 같습니다:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime dateTime;

이 예제에서는 ISO 8601 형식으로 LocalDateTime을 문자열로 변환합니다.

4. @JsonFormat Timezone 설정

@JsonFormat을 사용하여 타임존을 설정할 수 있습니다:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "UTC")
private ZonedDateTime zonedDateTime;

이 예제는 ZonedDateTime을 UTC 타임존의 'yyyy-MM-dd'T'HH:mm:ss.SSSZ' 형식으로 변환합니다.

5. @JsonFormat Number 패턴 설정

@JsonFormat을 사용하여 숫자의 형식을 지정할 수 있습니다:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#,##0.00")
private BigDecimal amount;

이 예제는 BigDecimal 타입의 변수를 천 단위 구분 기호와 소수점 둘째 자리까지 포맷팅된 문자열로 변환합니다.

6. JsonFormat Multiple Pattern

복수의 패턴을 사용할 수 있는 경우는 없지만, 다양한 형식을 지원하는 Custom Deserializer를 만들어 사용할 수 있습니다. 예를 들어:

public class MultiDateDeserializer extends JsonDeserializer<LocalDateTime> {
    private static final DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    private static final DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

    @Override
    public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String date = p.getText();
        try {
            return LocalDateTime.parse(date, formatter1);
        } catch (DateTimeParseException e) {
            return LocalDateTime.parse(date, formatter2);
        }
    }
}

위 예제에서는 두 가지 형식을 지원하는 Custom Deserializer를 정의합니다.

FAQ

Q1: @JsonFormat이란 무엇인가요?
A1: @JsonFormat은 Jackson 라이브러리를 사용하여 JSON 직렬화 및 역직렬화 시 날짜와 숫자 등의 포맷을 지정할 수 있는 어노테이션입니다.

Q2: @JsonFormat과 @DateTimeFormat의 차이점은 무엇인가요?
A2: @JsonFormat은 JSON 직렬화 및 역직렬화 시 사용되고, @DateTimeFormat은 스프링의 데이터 바인딩 시 사용됩니다. 두 어노테이션을 함께 사용할 수 있습니다.

Q3: LocalDateTime을 @JsonFormat으로 포맷팅하는 방법은?
A3: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")와 같이 설정하여 LocalDateTime을 포맷팅할 수 있습니다.

Q4: @JsonFormat으로 타임존을 설정하는 방법은?
A4: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "UTC")와 같이 설정하여 타임존을 지정할 수 있습니다.

Q5: 숫자를 @JsonFormat으로 포맷팅하는 방법은?
A5: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#,##0.00")와 같이 설정하여 숫자의 형식을 지정할 수 있습니다.

이와 같이 @JsonFormat 패턴을 사용하여 날짜와 숫자를 포맷팅하는 방법을 알아보았습니다. 이 글이 도움이 되셨기를 바라며, 다양한 상황에서 @JsonFormat을 활용해 보시기 바랍니다.

댓글