[JAVA] ObjectMapper

김다은·2024년 7월 31일

JAVA

목록 보기
5/14
post-thumbnail

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 어노테이션을 쓰는 방법 등이 있다.

      • 역직렬화의 처리 과정
        1. 기본 생성자로 객체를 생성한다.
        2. 필드값을 찾아서 값을 바인딩 해준다.
  • SpringBoot가 제공해주는 추가 기능들

    Gradle 기반의 Spring Boot는 Spring Boot가 추가적인 설정과 플러그인을 제공해주기 때문에, 기본 생성자가 없는 경우에도 에러 없이 객체가 정상적으로 만들어지곤 한다.

    • parameters 옵션은 Spring Boot가 제공하는 Gradle의 java 플러그인이 처리 해주기 때문에, 해당 플러그인을 사용하면 Java 컴파일의 -parameters 옵션이 자동 추가된다.
      plugins {
          id 'org.springframework.boot' version '2.7.5'
          id 'io.spring.dependency-management' version '1.0.11.RELEASE'
          id 'java'
      }
    • ParameterNames 모듈을 추가하는 부분은 Jackson을 AutoConfigure(자동설정)하는 과정에서 처리된다.

※ 참고
https://sangyups.github.io/categories/backend/spring/object-mapper/
https://mangkyu.tistory.com/223
https://velog.io/@zooneon/Java-ObjectMapper를-이용하여-JSON-파싱하기

profile
꾸준함으로 성취하는 개발자

0개의 댓글