Jackson이란 Json 데이터 구조를 처리해주는 라이브러리 입니다. Spring은 3.0버전 이후로 Jackson과 관련된 API를 제공함으로써, 우리가 직접 소스 코드를 작성하여 Json 데이터를 처리하지 않아도 자동으로 처리해주고 있습니다.
SpringBoot의 starter-web 에서는 default로 Jackson 관련된 라이브러리들을 제공하고 있습니다.
- Object -> Json 타입의 String
- Json 타입의 String -> Object
직접 Json 데이터를 처리해야 할 때는 Jackson 라이브러리의 ObjectMapper를 사용할 수 있습니다.
Object To Json
- ObjectMapper의 writeValueAsString() 메서드를 사용하여 변환
- Object를 Json 타입의 String으로 변환하기 위해서는 해당 Object에 get Method가 필요
// Star 클래스
@Getter
@AllArgsConstructor
public class Star {
private String name;
private int age;
}
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);
}
}
만약 get Method가 없다면 어떻게 될까요? @Getter 어노테이션을 삭제하고 Test를 재실행하면 다음과 같은 에러메시지가 발생합니다.
serializer(직렬화)에 대한 내용은 다음 링크에서 확인 가능합니다.
// Star 클래스
// @Getter
@AllArgsConstructor
public class Star {
private String name;
private int age;
}
No serializer found for class com.sparta.springmvc.response.Star and no properties discovered to create BeanSerializer
Json To Object
- ObjectMapper의 readValue() 메서드를 사용하여 변환
- 첫 번째 파라미터는 JSON 타입의 String, 두 번째 파라미터는 변환할 Object의 class 타입
- Json 타입의 String -> Object로 변환하기 위해서는 해당 Object에 기본 생성자와 get 혹은 set 메서드가 필요
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Star {
private String name;
private int age;
}
public class JacksonTest {
@Test
@DisplayName("Json To Object : 기본 생성자 & (Getter || Setter) 필요")
void test2() throws JsonProcessingException {
String json = "{\"name\" : \"Robbie\", \"age\" : 95}";
ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
Star star = objectMapper.readValue(json, Star.class);
System.out.println("star.getName() = " + star.getName());
System.out.println("star.getAge() = " + star.getAge());
}
}
만약 기본 생성자나 get 혹은 set 메서드가 없는 경우 어떻게 될까요? Start 클래스에서 @NoArgsConstructor 어노테이션을 삭제하고 Test를 재실행하면 다음과 같은 에러메시지가 발생합니다.
deserializer(역직렬화)에 대한 내용은 다음 링크에서 확인 가능합니다.
cannot deserialize from Object value
'Spring' 카테고리의 다른 글
[Spring] HTTP 데이터를 객체로 처리하는 방법 (0) | 2024.09.27 |
---|---|
[Spring] Path Variable 과 Request Param (0) | 2024.09.26 |
[Spring] 데이터를 Client에게 반환하는 방법(Response) (1) | 2024.09.26 |
[Spring] 정적 페이지와 동적 페이지 (1) | 2024.09.26 |
[Spring] 3 Layer - Controller (0) | 2024.09.26 |