프로젝트/아카이뷰

[Spring boot] @JsonInclude 어노테이션

cks._.hong 2024. 1. 4. 15:35

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으로 변환