Object Mapper
1. 직렬화와 역직렬화
직렬화(Serialization)
Object -> String
자바 객체를 JSON 형식의 문자열로 변환하는 과정을 의미합니다. 이를 통해 객체의 데이터를 파일이나 네트워크를 통해 전송 가능한 문자열 형태로 변환합니다.
역직렬화(Deserialization)
String -> Object
JSON 형식의 문자열을 자바 객체로 변환하는 과정을 의미합니다. 이를 통해 JSON 형식으로 전달받은 데이터를 자바 객체로 활용할 수 있습니다.
2. Jackson 라이브러리
Jackson은 JSON 데이터와 자바 객체 간의 변환을 쉽게 처리할 수 있도록 도와주는 강력하고 인기 있는 라이브러리입니다. 자바 개체의 직렬화 및 역직렬화를 처리하는 데 특화되어 있으며, 매우 빠르고 유연한 기능을 제공합니다.
3. ObjectMapper 클래스와 주요 설정
ObjectMapper는 Jackson 라이브러리의 핵심 클래스로, JSON과 자바 객체 간의 변환을 담당합니다.
configure 메서드를 사용하여 ObjectMapper의 동작을 커스터마이즈할 수 있습니다. 예를 들어, ACCEPT_SINGLE_VALUE_AS_ARRAY, FAIL_ON_UNKNOWN_PROPERTIES, FAIL_ON_NULL_FOR_PRIMITIVES 등의 설정을 사용하여 원하는 동작을 구성할 수 있습니다.
4. mapper.convertValue 메서드 활용
mapper.convertValue 메서드를 사용하면 JSON 데이터를 원하는 자바 객체로 변환할 수 있습니다. 이때, 변환 전 값(JSON)과 변환 후 클래스를 인자로 전달합니다. JSON에 없는 필드를 무시하거나, null인 경우 원시 데이터 형의 필드를 무시하는 등의 작업을 설정할 수 있습니다.
mapper.convertValue(변환 전 값(JSON), 변환 후 클래스) //단순 Object가 아닌 원하는 형태데이터(map, file, list 등)로 변환
import com.fasterxml.jackson.databind.ObjectMapper;
//Jackson: java.util.LinkedHashMap cannot be cast to X
ObjectMapper mapper = new ObjectMapper();
//MismatchedInputException: Cannot deserialize instance of 'java.util.ArrayList' out of START_OBJECT token
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //false: JSON에는 있지만 Mapping될 Object에는 없는 필드를 무시
mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);//true: null전달시 exception
List<DTONAME> str = mapper.convertValue(param.get("dtoList"), new TypeReference<DTONAME>() {});
//JNI: Unable to find constructor method id with signature '(Ljava/lang/String;)V'
5. 예외 처리
JSON과 자바 객체의 변환 과정에서 발생할 수 있는 예외에 대한 처리도 중요합니다. 블로그에서는 가능한 예외 상황과 그에 대한 적절한 처리 방법에 대해서도 설명합니다.
configure
//MismatchedInputException: Cannot deserialize instance of 'java.util.ArrayList' out of START_OBJECT token
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
'Backend > JAVA' 카테고리의 다른 글
[JAVA] 자바 외부 파일/ 외부 프로그램/ 명령어 실행 (exec) (0) | 2023.04.26 |
---|---|
JDBC를 이용한 DB 연결 (Connetion 생성) (0) | 2023.04.24 |
JAVA 엑셀 생성 (0) | 2023.04.12 |
JAVA 정규표현식 replace (Vue 다국어 동적 적용) (0) | 2023.04.11 |
XMLSlideShow 자바로 PPT파일 수정하기 (0) | 2023.03.05 |