Spring/Springboot-Intellij

[SpringBoot] Spring MVC - Jackson, ObjectMapper

congs 2025. 1. 30. 13:41

Jackson

  • JSON 데이터 구조를 처리해주는 라이브러리
    1. Object -> JSON타입의 String으로 변환
    2. JSON타입의 String -> Object로 변환

  •  
  • Spring은 3.0버전 이후로 Jacskon과 관련된 API를 제공
  • SpringBoot의 starter-web에서는 default로 Jackson 관련 라이브러리들을 제공
  • = 이미 External Libraries에 jackson이 있는 걸 확인가능
  • = 따로 build.gradle에 추가하지 않아도 됨

 

  • Java의 객체를 그냥 반환하면 Spring에서 내부적으로 처리
  • 하지만, 직접 JSON 데이터를 처리해야하는 경우에는 Jackson 라이브러리의 ObjectMapper를 사용 

 

 

 

 

1. Object To JSON : objectMapper.writeValueAsString()

objectMapper.writeValueAsString(star)

test패키지 - JacksonTest 클래스 생성

package com.sparta.springmvc;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sparta.springmvc.response.Star;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class JacksonTest {

    @Test
    @DisplayName("Object To JSON : get Method 필요")
    void test1() throws JsonProcessingException {
        //1. Star Object 생성
        Star star = new Star("Robbie", 95);

        //2. Jackson 라이브러리의 ObjectMapper사용
        ObjectMapper objectMapper = new ObjectMapper();
        //3. 파라미터 값으로 반환하고 싶은 Object넣기 = JSON으로 변환해줌
        String json = objectMapper.writeValueAsString(star);

        System.out.println("json = " + json);
    }


}
  • 이렇게 JSON형태의 String으로 변환된 것을 확인이 가능!

 

만약, Star class에 @Getter가 없었다면!

No serializer 이라는 오류가 뜸 ( Object ro JSON하는 과정= serializer 직렬화)= ObjectMapper를 사용할때는 @Getter가 꼭 필요하다!

 

2. JSON To Object  : ObjectMapper.readValue( , )

주의! 꼭 기본 생성자 & (get OR set) Method 필요 !!

ObjectMapper.readValue(json, Star.class)

  @Test
    @DisplayName("JSON To Object : 기본 생성자 & (get OR set) Method 필요")
    void test2() throws JsonProcessingException {
        String json = "{\"name\":\"Robbie\",\"age\":95}"; // JSON 타입의 String 생성

        ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper생성

        //(JSON, 어떤class(객체)로 매핑 할 건지)
        Star star = objectMapper.readValue(json, Star.class);//Star라는 객체를 만들거라 .class를 붙임
        System.out.println("star.getName() = " + star.getName());
        System.out.println("star.getName() = " + star.getAge());
    }

 

만약, Star class에 기본생성자가 없었다면!

  • no Creaters, like default constructor, exist : 기본 생성자가 없어요
  • cannot deserialize : 역직렬화(JSON To Object)가 안돼요

Star class에 @Getter 혹은 @Setter가 없었다면!

  • Unrecongnized field "name" : name이라는 filed를 찾을 수 없습니다