파란하늘의 지식창고
Published 2018. 11. 16. 17:09
RestTemplate list 반환하기 Study/Java
반응형

요청을 반환받는 클래스가 다음과 같다고 가정한다.

@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();

 

반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요