ObjectMapper는 객체와 다른 형식의 데이터(주로 JSON,XML 등) 간의 변환을 쉽게 해주는 도구이다. 이를 통해 객체를 직렬화(serialize)하거나 역직렬화(deserialize)할 수 있다.
1. Serialize: Java Object → JSON
2. Deserialize: JSON → Java Object
Java의 Jackson ObjectMapper
: Jackson은 JSON 데이터를 Java 객체로 변환하거나, Java 객체를 JSON 데이터로 변환하는 데 사용되는 라이브러리이다.
Maven Dependency 추가
먼저, Maven 프로젝트에 Jackson 라이브러리를 추가해야 한다.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
예시 코드
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class ObjectMapperExample {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
// JSON 문자열을 Java 객체로 변환
String jsonString = "{\"name\":\"John\", \"age\":30}";
try {
Person person = objectMapper.readValue(jsonString, Person.class);
System.out.println("Java 객체로 변환: " + person);
// Java 객체를 JSON 문자열로 변환**
String jsonOutput = objectMapper.writeValueAsString(person);
System.out.println("JSON 문자열로 변환: " + jsonOutput);
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// 기본 생성자, getter 및 setter
public Person() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
Serialization (Java Object → JSON)
: JSON의 형태로 serialize 시킬 때 objectMapper 의 writeValue() 와 writeValueAsString() 메서드를 사용한다. 이 두 메소드는 각각 파일로 변환, 문자열로 변환의 기능을 갖고 있다.
❗ serialize 하려고 하는 class에 Getter는 무조건 있어야 한다.
→ Jackson 라이브러리는 serialize 할 때, Getter의 prefix를 제거하고 소문자로 만들어서 식별하기 때문에 가져올 Getter가 없다면 오류를 내보내게 된다.
Deserialization (JSON → Java Object)
: JSON을 Java Object로 deserialize시킬 때는 objectMapper의 readValue() 메서드를 이용한다.
❗ deserialization 시킬 클래스에 JSON을 파싱한 결과를 전달할 생성자가 있어야 한다.
→ 기본 생성자 이용하거나 @JsonCreator 어노테이션을 쓰는 방법 등이 있다.
SpringBoot가 제공해주는 추가 기능들
Gradle 기반의 Spring Boot는 Spring Boot가 추가적인 설정과 플러그인을 제공해주기 때문에, 기본 생성자가 없는 경우에도 에러 없이 객체가 정상적으로 만들어지곤 한다.
plugins {
id 'org.springframework.boot' version '2.7.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}※ 참고
https://sangyups.github.io/categories/backend/spring/object-mapper/
https://mangkyu.tistory.com/223
https://velog.io/@zooneon/Java-ObjectMapper를-이용하여-JSON-파싱하기