상세 컨텐츠

본문 제목

[Spring Boot] ObjectMapper

카테고리 없음

by choiDev 2024. 6. 2. 21:30

본문

ObjectMapper란?

ObjectMapper는 Jackson 라이브러리 기능 중 하나로, Java 객체와 JSON 간의

직렬화(Serialization) or 역직렬화(DeSerialization)를쉽게 수행할 수 있도록 도와줍니다. 

 


Jackson이란?

Json외에도 다양한 데이터 형식을 지원하는 유연한 데이터 처리 라이브러리입니다. 

Jackson이 지원하는 주요 데이터 형식은 아래와 같습니다.

Jackson이 지원하는
데이터 형식
XML
YAML
CSV
Smile
CBOR
MessagePack
Protobuf
Avro
TOML

 


직렬화(Serialization)란?

객체를 저장하거나 전송할 수 있도록 바이트 스트림 또는 텍스트 형식으로 변환하는 과정입니다.

Jackson의 ObjectMapper를 사용하면 Java객체를 Json문자열로 변환할 수 있으며

객체를 네트워크로 전송하려거나 파일로 저장할려고 할때 사용합니다.

SpringBoot에서는 @ResponseBody(반환하는 객체를 Json으로 변환)  @RestController(모든 메서드가 자동으로 Json을 반환하도록 설정) 

 

역직렬화(Deserialization)란?

직렬화된 데이터를 원래의 객체로 복원하는 과정입니다.

Json 문자열을 Java객체로 변환하는 것, XML 문자열을 Java 객체로 변환하는 것 등을 의미합니다.

이를 통해 Json데이터를 객체 형태로 다룰 수 있습니다.

SpringBoot에서는 @RequestBody(요청으로받은 JSON를 객체로 변환)를 사용한 객체에 적용됩니다.

 


 

ObjectMapper활용 방법

 

ObjectMapper.wrtieValueAsString() 메서드를 활용하면 Java의 객체를 Json으로 변경이 가능합니다.

아래는 그 예제입니다

import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserLogger {
    private static final Logger log = LoggerFactory.getLogger(UserLogger.class);

    public static void main(String[] args) {
        try {
            // User 객체 생성
            User user = new User("John", 30);

            // ObjectMapper 생성
            ObjectMapper objectMapper = new ObjectMapper();

            // User 객체를 JSON 문자열로 변환
            String jsonString = objectMapper.writeValueAsString(user);

            // JSON 문자열을 log.info에 출력
            log.info("Serialized JSON: " + jsonString);
        } catch (Exception e) {
            log.error("Error serializing User object", e);
        }
    }
}

 

 

위에서 User를 json으로 변경했으니 다시 User로 변경하기 위해서는 아래같이 코드를 작성해야합니다.

import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserLogger {
    private static final Logger log = LoggerFactory.getLogger(UserLogger.class);

    public static void main(String[] args) {
        try {
            // User 객체 생성
            User user = new User("John", 30);

            // ObjectMapper 생성
            ObjectMapper objectMapper = new ObjectMapper();

            // User 객체를 JSON 문자열로 변환
            String jsonString = objectMapper.writeValueAsString(user);

            // JSON 문자열을 log.info에 출력
            log.info("Serialized JSON: " + jsonString);

            // JSON 문자열을 다시 User 객체로 변환
            User parsedUser = objectMapper.readValue(jsonString, User.class);

            // User 객체 정보 출력
            log.info("Parsed User: " + parsedUser);
        } catch (Exception e) {
            log.error("Error serializing or deserializing User object", e);
        }
    }
}

 

이렇게 기본적인 사용법 이외에도

ObjectMapper는 정말 다양한 사용 방법이 존재합니다.

 

 

아래는 일전에 작성했던 ObjectMapper를 사용했을때의 장애 기록입니다.

ObjectMapper 사용시 주의사항 장애기록 - JsonMappingException: Infinite recursion (StackOverflowError)