Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Jackson @JsonInclude 어노테이션 완벽 가이드: 조건부 필드 제외 방법

Jackson @JsonInclude 어노테이션이란?

Jackson 라이브러리의 @JsonInclude 어노테이션은 Java 객체를 JSON으로 직렬화할 때 특정 조건에 따라 클래스의 속성(property)이나 필드(field)를 출력에서 제외하기 위해 사용됩니다. 예를 들어, 값이 null인 필드나 빈 컬렉션을 JSON 결과에서 생략하고 싶을 때 매우 유용합니다.

이 어노테이션은 JsonInclude.Include 열거형(enum)을 통해 정의되며, 이 enum에는 속성(필드)을 제외할지 여부를 결정하는 다음과 같은 상수들이 포함되어 있습니다.

JsonInclude.Include의 주요 상수

  • ALWAYS: 속성 값을 항상 JSON에 포함합니다.
  • NON_DEFAULT: 필드 값이 기본값(default)과 동일한 경우 제외합니다.
  • NON_EMPTY: 값이 null이거나 비어 있는 경우(빈 문자열, 빈 컬렉션 등) 제외합니다.
  • NON_NULL: 값이 null인 경우에만 제외합니다.

문법(Syntax)

public static enum JsonInclude.Include extends Enum<JsonInclude.Include>

예제 코드

아래 예제에서는 Employee 클래스에 @JsonInclude(JsonInclude.Include.NON_EMPTY)를 적용하여, 값이 비어 있는 필드가 JSON 출력에서 어떻게 제외되는지 확인할 수 있습니다.

import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.*;
import java.io.*;

public class JsonIncludeTest {
    public static void main(String args[]) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Employee emp = new Employee();
        String jsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp);
        System.out.println(jsonString);
    }
}

// Employee 클래스
@JsonInclude(JsonInclude.Include.NON_EMPTY)
class Employee {
    public int empId = 115;
    public String empName = null;

    @Override
    public String toString() {
        return "Employee{" +
                "empId=" + empId +
                ", empName='" + empName + '\'' +
                '}';
    }
}

실행 결과(Output)

{
    "empId" : 115
}

결과 분석

위 실행 결과를 보면 empId는 값이 115로 존재하므로 JSON에 정상적으로 포함되었지만, empNamenull이므로 NON_EMPTY 조건에 의해 JSON 출력에서 자동으로 제외된 것을 확인할 수 있습니다.

이처럼 @JsonInclude 어노테이션을 활용하면 불필요하거나 의미 없는 필드까지 클라이언트에 전송하지 않아도 되므로, 더 깔끔하고 간결한 JSON 응답을 만들 수 있으며 API 응답 크기 절감과 데이터 보안 측면에서도 도움이 됩니다.