반응형
요청을 반환받는 클래스가 다음과 같다고 가정한다.
@Data
public class ResultClass {
private long idx;
private String name;
}
List로 리턴 받는 방법 - 문제가 있음. 비추천
List<Resultclass> list = restTemplate.getForObject("url", List.class);
이 방법은 문제가 있다.
컴파일에는 문제가 없지만 호출하고 나서 list 값을 살펴보면 ResultClass 객체가 아닌 LinkedHashMap 객체를 가지고 있는 걸 확인할 수 있다.
그래서 만약 다음처럼 호출하는 순간 에러가 발생한다.
List<Resultclass> list = restTemplate.getForObject("url", List.class);
ResultClass resultClass = list.get(0);
resultClass.getIdx(); // ClassCastException 발생
List<map<Object, Object>>으로 반환받아 사용한다는 전제라면 이렇게 호출해도 되지만 재차 캐스팅을 하는 불편함이 있기 때문에 권장하지 않는다.
배열로 반환받기
xxxForObject 메서드를 사용하면 아래와 같다.
ResultClass[] resultClasses = restTemplate.getForObject("url", ResultClass[].class);
List<Resultclass> list = Arrays.asList(resultClasses);
xxxForEntity를 사용하면 아래와 같다.
ResponseEntity<ResultClass[]> responseEntity = restTemplate.getForEntity("url", ResultClass[].class);
List<Resultclass> list = Arrays.asList(responseEntity.getBody());
exchange에서 ParameterizedTypeReference 사용하기
springframework 3.2 이후 ParameterizedTypeReference를 지원하여 아래와 같이 사용할 수 있게 되었다.
ResponseEntity<List<ResultClass>> response = restTemplate.exchange("url",HttpMethod.GET, null, new ParameterizedTypeReference<List<ResultClass>>() {});
List<ResultClass> list = response.getBody();
반응형
'Study > Java' 카테고리의 다른 글
빌드 시 constructor ... already defined in class 에러가 발생하는 경우 (0) | 2018.11.28 |
---|---|
JDK 11 New Features (0) | 2018.11.22 |
JDK 10 New Features (0) | 2018.11.21 |
JDK 9 New Features (0) | 2018.11.21 |
JCP JSR JEP에 대해 (0) | 2018.11.20 |
자주 쓰는 spring util 기록 (0) | 2018.11.14 |
java Exception은 어떻게 사용하는게 좋을까? (0) | 2018.11.12 |
Spring Boot 2.1.0 Release (0) | 2018.10.31 |
Spring Boot 2.0 PropertyMapper 사용하기 (0) | 2018.10.24 |
Spring Boot 2.0에서 Deprecated 된 RelaxedPropertyResolver 변경하기 (0) | 2018.10.23 |