@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을 활용해 보시기 바랍니다.
댓글