Spring 입문주차/1주차

11. Jackson이란 무엇일까?

note994 2024. 8. 13. 20:11

Jackson 라이브러리

Jackson은 JSON 데이터 구조를 처리해주는 라이브러리이다.

Object를 JSON 타입의 String으로 변환해줄 수 있다.

JSON 타입의 String을 Object로 변환해줄 수 있다.

Spring은 3.0버전 이후로 Jackson과 관련된 API를 제공함으로써, 우리가 직접 소스 코드를 작성하여 JSON 데이터를 처리하지 않아도 자동으로 처리해주고 있다.

따라서 SpringBoot의 stater-web 에서는 default로 Jackson 관련 라이브러리들을 제공하고 있다.

직접 JSON 데이터를 처리해야할 때는 Jackson 라이브러리의 ObjectMapper를 사용할 수 있다.

jackson 라이브러리가 추가되어있는것을 확인


Object To JSON

테스트를 해볼것이기 때문에 test 폴더의 com.sparta.springmvc 패키지에 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 {
        Star star = new Star("Robbie", 95);

        ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
        String json = objectMapper.writeValueAsString(star);

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

objectMapper의 writeValueAsString 메서드를 사용하여 변환할 수 있다.

파라미터에 JSON으로 변환시킬 Object의 객체를 주면 된다.

Object를 JSON 타입의 String으로 변환하기 위해서는 해당 Object에 get Method가 필요하다.

테스트 코드를 실행 해보면 JSON 형태의 String으로 변환 되었다.


JSON to Object

JacksonTest 파일에 아래의 코드를 추가

@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

    Star star = objectMapper.readValue(json, Star.class);
    System.out.println("star.getName() = " + star.getName());
}

objectMapper의 readValue 메서드를 사용하여 변환할 수 있다.

첫 번째 파라미터는 JSON 타입의 String, 두 번째 파라미터에는 변환할 Object의 class 타입을 주면 된다.

JSON 타입의 String을 Object로 변환하기 위해서는 해당 Object에 기본 생성자와 get 혹은 set 메서드가 필요하다.

 

그리고 현재 코드에 따르면 Star 클래스의 필드로 name과 age라는 필드가 있어야 한다. 이름이 다르면 오류발생!

star.getName() = Robbie 라고 잘 출력되었다.