반응형
    
    
    
  - RestTemplate Exchange 매소드 ResponseType 을 Generic Type 으로 매핑하기 -
RestTemplate 을 사용하다 보면 Map 형태로 응답을 받아야 할 때가 있다.
이 포스팅에서는 resttemplate에서 map으로 응답받는 방법에 대해 포스팅한다.
우선 RestTemplate을 사용해서 API를 호출할 때 잘 만들어진 API라면 아래와 같은 형태를 갖고 있다.
//네이버 API 호출 
//https://developers.naver.com/docs/login/profile/
{
  "resultcode": "00",
  "message": "success",
  "response": {
    "email": "openapi@naver.com",
    "nickname": "OpenAPI",
    "profile_image": "https://ssl.pstatic.net/static/pwe/address/nodata_33x33.gif",
    "age": "40-49",
    "gender": "F",
    "id": "32742776",
    "name": "오픈 API",
    "birthday": "10-01"
  }
}
대부분 resultCode(API 상태) 와 message(메세지) 는 항상 있는 값이고 response(요청한 데이터) 부분만 변해
아래와 같은 제네릭타입의 응답데이터를 담을 수 있는 DTO를 만들어서 관리한다.
import lombok.Data;
@Data
public class ResponseDataDTO<T> {
	private String responseCode;
	private T response;
	private String message;
}
RestTemplate을 사용하여 API 통신을 하려고 하면 exchange 매소드의 responseType 타입 부분을 채워야 하는데 일반 클래스의 경우 그냥 responseDTO.class 를 해서 class를 넘겨주면 되는데 제네릭 타입의 경우는 이게 불가능해 아래의 방법으로 매핑을 시켜줘야 한다.
new ParameterizedTypeReference<ResponseDataDTO<Map<String,Object>>>() {} 를
사용하면 제네릭 타입으로 자동 매핑된다.
(ParameterizedTypeReference docs :
( Map<String,Object> 부분을 아무거나로 변경해서 받으면 됨. )
ResponseDataDTO<Map<String,Object>> responseDataDTO = 
	restTemplate.exchange(
    		API_URL ,
            HttpMethod.GET ,
            null, 
            new ParameterizedTypeReference<ResponseDataDTO<Map<String,Object>>>() {}
    ).getBody();
위에서는 귀찮아서 Map형태로 받았는데 이걸 원하는 DTO로 넣어주면 된다.
반응형
    
    
    
  'Spring > spring boot' 카테고리의 다른 글
| Spring Boot 이메일 인증 구현하기 - 삽질중인 개발자 (9) | 2021.02.14 | 
|---|---|
| @ConfigurationProperties 사용법 - 삽질중인 개발자 (0) | 2020.06.01 | 
| Spring boot 로그 설정 및 출력 방법- logback 설정하기 - 삽질중인 개발자 (0) | 2020.05.24 | 
| spring boot static 파일 다운로드 구현 - 삽질중인 개발자 (0) | 2020.04.05 | 
| Spring boot oracle db 연동 , spring boot oracle jdbc 설정 - 삽질중인 개발자 (0) | 2019.12.16 | 
 
 
									
								 
									
								