Java에서 JSON 데이터를 다룰 때 Jackson 라이브러리의 JsonGenerator 클래스는 메모리에 객체 모델(Object Model)을 구성하는 대신, 스트림 방식으로 JSON 데이터를 직접 작성할 수 있게 해주는 핵심 클래스입니다.
JsonGenerator에서 켜고 끌 수 있는(on/off) 설정 목록은 JsonGenerator.Feature라는 열거형(enum)에 정의되어 있습니다. 이 열거형에는 해당 enum 타입의 모든 상수를 배열로 반환하는 정적 메서드 values()가 포함되어 있어, 전체 설정 항목을 손쉽게 순회하며 확인할 수 있습니다.
문법(Syntax)
public static enum JsonGenerator.Feature extends Enum<JsonGenerator.Feature>
설정 상태 확인하기
각 기능(Feature)이 현재 활성화되어 있는지 여부는 isEnabled() 메서드를 통해 확인할 수 있습니다. 아래 예제는 모든 Feature를 순회하면서 각 설정의 활성화 상태를 출력하는 코드입니다.
예제 코드
import java.io.*;
import com.fasterxml.jackson.core.*;
public class JsonGeneratorSettingsTest {
public static void main(String[] args) throws IOException {
StringWriter writer = new StringWriter();
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jsonFactory.createGenerator(writer);
for(JsonGenerator.Feature feature : JsonGenerator.Feature.values()) {
boolean result = jsonGenerator.isEnabled(feature);
System.out.println(feature.name() + ":" + result);
}
jsonGenerator.close();
}
}실행 결과(Output)
위 코드를 실행하면 기본 생성된 JsonGenerator의 각 Feature별 활성화 여부가 다음과 같이 출력됩니다.
AUTO_CLOSE_TARGET:true AUTO_CLOSE_JSON_CONTENT:true FLUSH_PASSED_TO_STREAM:true QUOTE_FIELD_NAMES:true QUOTE_NON_NUMERIC_NUMBERS:true ESCAPE_NON_ASCII:false WRITE_NUMBERS_AS_STRINGS:false WRITE_BIGDECIMAL_AS_PLAIN:false STRICT_DUPLICATE_DETECTION:false IGNORE_UNKNOWN:false
주요 Feature 설명
- AUTO_CLOSE_TARGET(true): 제너레이터가 닫힐 때 대상 스트림도 자동으로 닫습니다.
- AUTO_CLOSE_JSON_CONTENT(true): 미완료된 JSON 배열/객체를 자동으로 닫아줍니다.
- FLUSH_PASSED_TO_STREAM(true): flush 호출 시 하위 출력 스트림까지 함께 플러시합니다.
- QUOTE_FIELD_NAMES(true): 필드 이름을 큰따옴표로 감싸서 출력합니다.
- QUOTE_NON_NUMERIC_NUMBERS(true): NaN, Infinity 같은 비숫자 값을 따옴표로 감싼 문자열로 처리합니다.
- ESCAPE_NON_ASCII(false): ASCII 범위를 벗어나는 문자를 유니코드 이스케이프 시퀀스로 변환합니다. (기본값: 비활성)
- WRITE_NUMBERS_AS_STRINGS(false): 숫자를 문자열로 변환하여 작성합니다.
- WRITE_BIGDECIMAL_AS_PLAIN(false): BigDecimal을 지수 표기법 없이 일반 형태로 출력합니다.
- STRICT_DUPLICATE_DETECTION(false): 중복된 필드 이름을 엄격하게 검사하여 오류를 발생시킵니다.
이처럼 values()와 isEnabled() 메서드를 조합하면 JsonGenerator의 모든 설정 상태를 프로그래밍 방식으로 쉽게 점검할 수 있으며, 필요에 따라 특정 Feature만 활성화하거나 비활성화하여 JSON 출력 동작을 세밀하게 제어할 수 있습니다.