
- Jackson은 JSON 데이터 구조를 처리해주는 라이브러리
- Object를
JSON타입의 String으로 변환 가능JSON타입의 String을 Object로 변환 가능
Spring은 3.0버전 이후로 Jackson과 관련된 API를 제공함으로써, 우리가 직접 소스 코드를 작성하여 JSON 데이터를 처리하지 않아도 자동으로 처리해주고 있습니다.
starter-web dependencies 에서는 default로 Jackson 관련 라이브러리들을 제공하고 있습니다.JSON 데이터를 처리해야할 때는 Jackson 라이브러리의 ObjectMapper를 사용할 수 있습니다.package com.sparta.springmvc.response;
import lombok.Getter;
@Getter
public class Star {
String name;
int age;
public Star(String name, int age) {
this.name = name;
this.age = age;
}
public Star() {}
}
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);
}
}
// String 타입의 json 형태로 반환
// 결과 : json = {"name":"Robbie","age":95}
ObjectMapper의 writeValueAsString() 메서드를 사용하여 변환할 수 있습니다.직렬화(serializer) 에러가 발생합니다.
직렬화(serializer)란 객체(Object)를 전송하거나 저장할 수 있는 형태로 변환하는 것
즉, Java 객체 → JSON 문자열로 변환하는 것
public class 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());
System.out.println("star.getName() = " + star.getAge());
}
}
// 결과
// star.getName() = Robbie
// star.getAge() = 95
ObjectMapper의 readValue 메서드를 사용하여 변환할 수 있습니다.역직렬화(deserializer) 에러가 발생합니다.
- JSON = { key : value } 입니다.
- 따라서 직렬화와 역직렬화를 할 때는 key 이름 통일은 필수 입니다.
- 혹은 Json 관련 어노테이션을 통해 처리할 수도 있습니다.