Jackson은 Java 객체와 JSON 데이터를 서로 변환해주는 라이브러리이다.
Spring 환경에서는 기본적으로 Jackson이 내장되어 있어 별도의 의존성 설정 없이 바로 사용할 수 있다.
Jackson을 사용하면 다음 두 가지 변환이 가능하다.
- Java Object → JSON
- JSON → Java Object
Spring MVC에서 @ResponseBody, @RestController를 사용할 때도 내부적으로 Jackson이 사용된다.
ObjectMapper
Jackson에서 실제 변환 작업을 담당하는 핵심 클래스가 ObjectMapper이다.
이 클래스를 통해 객체 직렬화(serialization)와 역직렬화(deserialization)를 수행한다.
Object → JSON (직렬화)
Java 객체를 JSON 문자열 형태로 변환하는 것을 직렬화(Serialization) 라고 한다.
@Test
@DisplayName("Object To JSON : get Method 필요")
void test1() throws JsonProcessingException {
Star star = new Star("Robbie", 95);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(star);
System.out.println("json = " + json);
}
동작 원리 및 주의사항
- Jackson은 getter 메서드를 기준으로 객체의 필드를 JSON으로 변환한다.
- Lombok의 @Getter를 사용하면 Jackson이 내부적으로 해당 getter를 호출한다.
- getter가 존재하지 않으면 다음과 같은 문제가 발생한다.
- 직렬화 불가
- No serializer found 관련 에러 발생
즉, Object → JSON 변환 시에는 getter 메서드가 반드시 필요하다.
JSON → Object (역직렬화)
JSON 문자열을 Java 객체로 변환하는 것을 역직렬화(Deserialization) 라고 한다.
@Test
@DisplayName("JSON To Object : 기본 생성자 & (get OR set) Method 필요")
void test2() throws JsonProcessingException {
String json = "{\"name\":\"Robbie\",\"age\":95}";
ObjectMapper objectMapper = new ObjectMapper();
Star star = objectMapper.readValue(json, Star.class);
System.out.println("star.getName() = " + star.getName());
}
파라미터 설명
- 첫 번째 파라미터: JSON 형태의 문자열
- 두 번째 파라미터: 변환 대상이 될 클래스 타입
JSON → Object 변환 시 필수 조건
1. 기본 생성자 필요
- Jackson은 객체를 생성할 때 기본 생성자(NoArgsConstructor) 를 먼저 호출한다.
- 기본 생성자가 없으면 객체 생성 자체가 불가능하여 역직렬화가 실패한다.
public Star() {}
2. Setter 또는 Getter 필요
- JSON 값을 객체의 필드에 주입하기 위해 setter가 필요하다.
- @Setter가 있으면 정상 동작한다.
- setter가 없고 getter만 있는 경우에도 일부 상황에서는 동작하지만, 일반적으로 setter 사용을 권장한다.
3. JSON Key와 필드명이 정확히 일치해야 함
{
"name": "Robbie",
"age": 95
}
- JSON의 key 값과 Java 클래스의 필드명이 다르면 에러가 발생한다.
- Java 객체에 존재하지 않는 key가 JSON에 포함되어 있어도 에러가 발생한다.
이 부분은 실무에서도 매우 중요한 포인트이며,
API 스펙 변경 시 가장 자주 문제를 일으키는 요소 중 하나이다.
'BackEnd > 내일배움캠프' 카테고리의 다른 글
| 12. HTTP 데이터를 객체로 처리하는 방법 (0) | 2026.02.10 |
|---|---|
| 11. Path Variable과 Request Param (0) | 2026.02.10 |
| 9. 데이터를 Client에 반환하는 방법 (0) | 2026.02.10 |
| 8. 정적 페이지와 동적 페이지 (0) | 2026.02.10 |
| 7. Controller란? (0) | 2026.02.10 |