ObjectMapper는 Jackson 라이브러리 기능 중 하나로, Java 객체와 JSON 간의
직렬화(Serialization) or 역직렬화(DeSerialization)를쉽게 수행할 수 있도록 도와줍니다.
Json외에도 다양한 데이터 형식을 지원하는 유연한 데이터 처리 라이브러리입니다.
Jackson이 지원하는 주요 데이터 형식은 아래와 같습니다.
Jackson이 지원하는 데이터 형식 |
XML |
YAML |
CSV |
Smile |
CBOR |
MessagePack |
Protobuf |
Avro |
TOML |
객체를 저장하거나 전송할 수 있도록 바이트 스트림 또는 텍스트 형식으로 변환하는 과정입니다.
Jackson의 ObjectMapper를 사용하면 Java객체를 Json문자열로 변환할 수 있으며
객체를 네트워크로 전송하려거나 파일로 저장할려고 할때 사용합니다.
SpringBoot에서는 @ResponseBody(반환하는 객체를 Json으로 변환) @RestController(모든 메서드가 자동으로 Json을 반환하도록 설정)
직렬화된 데이터를 원래의 객체로 복원하는 과정입니다.
Json 문자열을 Java객체로 변환하는 것, XML 문자열을 Java 객체로 변환하는 것 등을 의미합니다.
이를 통해 Json데이터를 객체 형태로 다룰 수 있습니다.
SpringBoot에서는 @RequestBody(요청으로받은 JSON를 객체로 변환)를 사용한 객체에 적용됩니다.
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)