JSONObject는 문자열(String)로부터 텍스트를 파싱하여 Map 형태의 객체를 생성할 수 있습니다. 한편 Enum(열거형)은 상수들의 집합을 정의할 때 사용되며, 숫자나 텍스트 데이터로 표현하기 어려운 미리 정의된 값 목록이 필요할 때 유용합니다. Jackson 라이브러리를 활용하면 ObjectMapper 클래스의 readValue() 메서드를 통해 JSON 객체를 손쉽게 Enum 타입으로 변환(역직렬화)할 수 있습니다.
아래 예제에서는 Jackson 라이브러리를 사용하여 JSON 객체를 Java Enum으로 변환(역직렬화)하는 과정을 살펴보겠습니다.
예제 코드
import com.fasterxml.jackson.databind.*;
public class JSONToEnumTest {
public static void main(String arg[]) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Employee emp = mapper.readValue("{\"jobType\":\"CONTRACT\"}", Employee.class);
System.out.println(emp.getJobType());
}
public static class Employee {
private JobType jobType;
public JobType getJobType() {
return jobType;
}
public void setJobType(JobType jobType) {
this.jobType = jobType;
}
}
public enum JobType {
PERMANENT,
CONTRACT,
}
}실행 결과
CONTRACT
코드 설명
위 예제의 동작 방식은 다음과 같습니다.
1. ObjectMapper 인스턴스를 생성합니다. ObjectMapper는 Jackson에서 JSON 직렬화 및 역직렬화를 담당하는 핵심 클래스입니다.
2. readValue() 메서드에 JSON 문자열과 대상 클래스(Employee.class)를 전달하면, Jackson이 JSON의 jobType 필드 값을 자동으로 매핑합니다.
3. JSON 문자열의 값 "CONTRACT"는 JobType Enum에 정의된 상수 이름과 일치하므로, Jackson이 이를 해당 Enum 상수로 자동 변환합니다.
주의 사항
JSON 문자열의 값이 Enum에 정의되어 있지 않은 경우(예: "PART_TIME"), 기본 설정에서는 InvalidFormatException이 발생합니다. 이를 방지하려면 @JsonCreator 애노테이션으로 커스텀 팩토리 메서드를 정의하거나, READ_UNKNOWN_ENUM_VALUES_AS_NULL 같은 DeserializationFeature를 활성화하여 알 수 없는 값을 null로 처리할 수도 있습니다.