JAVA/SPRING

[Spring] RestTemplate을 사용하여 JSON 배열을 List객체로 매핑

오선지♬ 2024. 8. 30. 19:54
728x90
반응형

RestTemplate을 사용하여 JSON 배열을 List<ResYhIftkUserApiListDTO> 타입의 객체로 매핑하는 방법

 

1. DTO 클래스 정의

먼저, JSON 응답을 매핑할 DTO(Data Transfer Object) 클래스를 정의합니다.

API가 다음과 같은 JSON 배열을 반환한다고 가정합니다:

[
    {
        "userId": 1,
        "userName": "John Doe",
        "email": "johndoe@example.com"
    },
    {
        "userId": 2,
        "userName": "Jane Smith",
        "email": "janesmith@example.com"
    }
]

이 JSON 구조에 맞춰 ResYhIftkUserApiListDTO 클래스를 정의합니다.

public class ResYhIftkUserApiListDTO {
    private Integer userId;
    private String userName;
    private String email;

    // Getters and Setters
    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "ResYhIftkUserApiListDTO{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

 

 

2. JSON 배열을 List로 매핑하기

이제 RestTemplate을 사용해 GET 요청을 보내고, JSON 배열 응답을 List<ResYhIftkUserApiListDTO>로 매핑해보겠습니다.

import org.springframework.core.ParameterizedTypeReference;
import org.springframework.web.client.RestTemplate;
import java.util.List;

public class RestTemplateExample {

    public static void main(String[] args) {
        // RestTemplate 인스턴스 생성
        RestTemplate restTemplate = new RestTemplate();
        
        // GET 요청을 보낼 URL
        String url = "https://example.com/api/users";
        
        // ParameterizedTypeReference를 사용하여 리스트 타입 지정
        List<ResYhIftkUserApiListDTO> userList = restTemplate.exchange(
            url,
            HttpMethod.GET,
            null,
            new ParameterizedTypeReference<List<ResYhIftkUserApiListDTO>>() {}
        ).getBody();

        // 결과 출력
        if (userList != null) {
            userList.forEach(System.out::println);
        }
    }
}

 

3. 설명

  • exchange(): RestTemplate의 exchange() 메서드를 사용하면 더 다양한 HTTP 요청을 처리할 수 있으며, 특히 제네릭 타입을 처리할 때 유용합니다. 여기서는 HttpMethod.GET을 사용해 GET 요청을 보냈습니다.
  • ParameterizedTypeReference: Java의 제네릭 타입을 처리하기 위해 ParameterizedTypeReference를 사용합니다. 이 클래스는 응답 타입을 지정할 때 필요한 정보를 제공합니다. 여기서는 List<ResYhIftkUserApiListDTO> 타입의 응답을 받기 위해 사용됩니다.
  • getBody(): exchange() 메서드는 ResponseEntity를 반환하며, 실제 응답 내용은 getBody() 메서드로 가져올 수 있습니다.

 

4. 실행 결과

위 코드를 실행하면, 지정된 URL에서 JSON 배열을 가져와 List<ResYhIftkUserApiListDTO>로 매핑하고, 각 항목을 콘솔에 출력합니다.

ResYhIftkUserApiListDTO{userId=1, userName='John Doe', email='johndoe@example.com'}
ResYhIftkUserApiListDTO{userId=2, userName='Jane Smith', email='janesmith@example.com'}

 

728x90
반응형

'JAVA > SPRING' 카테고리의 다른 글

[SPRING] fixedDelay  (0) 2024.09.17
[Spring] Stringtils equals/ equalsAny/ equalsIgnoreCase/ equalsAnyIgnoreCase  (0) 2024.09.03
[Spring] RestTemplate  (0) 2024.08.29
[SPRING] 예외 추상화  (0) 2024.06.14
[SPRING] [Lombok]@ToString 추가  (0) 2024.03.18