[Java] 중첩된 구조의 JSON 데이터를 DTO 맵핑 방법

2023-05-09


사진: Unsplash 의 Nigel Hoare


1. 방법

 

사용 라이브러리 : Jackson: https://github.com/FasterXML/jackson

 

GitHub - FasterXML/jackson: Main Portal page for the Jackson project

Main Portal page for the Jackson project. Contribute to FasterXML/jackson development by creating an account on GitHub.

github.com


	// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind  
	implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.15.3'
	// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core 
	implementation 'com.fasterxml.jackson.core:jackson-core:2.15.3'

예시 json

 

{
    "name": "John Doe",
    "age": 30,
    "email": "johndoe@example.com"
}

예시 DTO

 

public class User {
    private String name;
    private int age;
    private String email;

    // 생성자, getter, setter, toString 등의 메서드 생략
}

JSON 문자열을 DTO 객체로 변환하기 위해서는, 먼저 JSON 문자열을 파싱하여 JsonNode 객체로 변환해야 합니다. 이를 위해서는 ObjectMapper 클래스를 사용하면 되며, JsonNode 객체에서 필요한 필드 값을 가져와서 DTO 객체에 매핑합니다. 이를 위해서는 readValue 메서드를 사용하면 됩니다.

 

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Example {

    public static void main(String[] args) throws Exception {
        String jsonStr = "{\"name\":\"John Doe\",\"age\":30,\"email\":\"johndoe@example.com\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(jsonStr);

        User user = objectMapper.treeToValue(jsonNode, User.class);

        System.out.println(user.toString());
    }
}

메인 이미지 출처 : 사진: UnsplashNigel Hoare