JsonInclude 어노테이션이 왜 궁금했을까 ❓
- Error Handling을 공부하는 과정에서 Validation이 발생한 필드와 메시지를 JSON 형식으로 클라이언트에게 내려주는 부분이 있었다.
- 해당 부분에 @JsonInclude 어노테이션이 작성이 되어있어 알아보았다.
@JsonInclude가 작성되어 있었던 코드
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private final List<ValidationError> errors;
@Getter
@Builder
@RequiredArgsConstructor
public static class ValidationError {
private final String field;
private final String message;
public static ValidationError of(final FieldError fieldError) {
return ValidationError.builder()
.field(fieldError.getField())
.message(fieldError.getDefaultMessage())
.build();
}
}
- Validation 확인 과정에서 발생하는 에러들이 errors에 담기게 되는데 Validatiton이 정상적일 경우 errors에는 값이 들어오지 않아 null 값을 가지게 된다.
- 해당 부분을 JsonInclude.Include.NON_EMPTY를 통해 직렬화 과정에서 null 값이 포함되지 않도록 하였다.
@JsonInclude 어노테이션
Option |
Operation |
ALWAYS |
모든 데이터를 JSON으로 변환 |
NON_NULL |
NULL을 제외한 데이터를 JSON으로 변환 |
NON_ABSENT |
NULL / AtomicReference를 제외한 데이터를 JSON으로 변환 |
NON_EMPTY |
NULL / ABSENT / Collection / Map / Array / String이 NULL이거나 0인 데이터를 제외하여 JSON으로 변환 |
NON_DEFAULT |
EMPTY / Primitive 타입의 default 값 / Date의 Timestamp 값이 0L인 데이터를 제외하여 JSON으로 변환 |