[SPRING] Spring RESTTemplate을 사용하는 Generics
SPRINGSpring RESTTemplate을 사용하는 Generics
나는 그런 종류가있다 :
public class Wrapper<T> {
private String message;
private T data;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
resttemplate은 다음과 같이 사용합니다.
...
Wrapper<Model> response = restTemplate.getForObject(URL, Wrapper.class, myMap);
Model model = response.getData();
...
그러나 그것은 :
ClassCastException
나는 그것을 읽었다. 잭슨을 자바에서 사용하려고 할 때 문제가 발생했지만 도움이되지 않았다. 내 문제와 관련된 몇 가지 주제가 있습니다 : https://jira.springsource.org/browse/SPR-7002 및 https://jira.springsource.org/browse/SPR-7023
어떤 아이디어?
추신 : 내 오류는 :
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to a.b.c.d.Model
resttemplate이 제네릭 변수를 이해하지 못하고 아마도 일반 T 대신 Object로 받아 들일 수도 있습니다. 따라서 LinkedHashMap이됩니다. 당신은 그것을 여기서 읽을 수 있습니다 그것은 그것이 무엇을 marshalls에서 설명 할 때 :
해결법
-
==============================
1.이 문제를 해결하기 위해 3.2 M2에 ParameterizedTypeReference가 도입되었습니다.
이 문제를 해결하기 위해 3.2 M2에 ParameterizedTypeReference가 도입되었습니다.
Wrapper<Model> response = restClient.exchange(loginUrl, HttpMethod.GET, null, new ParameterizedTypeReference<Wrapper<Model>>() {}).getBody();
그러나 postForObject / getForObject 변형은 도입되지 않았습니다.
-
==============================
2.여러분이 할 수 있다고 생각하는 유일한 점은 Wrapper를 확장하고 모델을 generic으로 사용하는 새로운 클래스를 만드는 것입니다.
여러분이 할 수 있다고 생각하는 유일한 점은 Wrapper를 확장하고 모델을 generic으로 사용하는 새로운 클래스를 만드는 것입니다.
class WrapperWithModel extends Wrapper<Model>{}; WrapperWithModel response = restTemplate.getForObject(URL, WrapperWithModel.class);
최상의 솔루션은 아니지만 적어도 수동으로 응답을 언 마샬 할 필요는 없습니다.
-
==============================
3.RestTemplate과 함께 제네릭을 사용하지 마십시오. 제네릭을 숨길 래퍼 객체로 요청 및 응답 객체를 래핑합니다.
RestTemplate과 함께 제네릭을 사용하지 마십시오. 제네릭을 숨길 래퍼 객체로 요청 및 응답 객체를 래핑합니다.
from https://stackoverflow.com/questions/8108887/generics-with-spring-resttemplate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 JMX에 원격으로 액세스하는 방법 (0) | 2018.12.22 |
---|---|
[SPRING] 왜 서비스 계층을 사용합니까? (0) | 2018.12.22 |
[SPRING] javax.transaction.Transactional 대 org.springframework.transaction.annotation.Transactional (0) | 2018.12.22 |
[SPRING] Spring MVC 컨트롤러에서 Spring 데이터 투영을 적용하는 방법은 무엇입니까? (0) | 2018.12.22 |
[SPRING] Spring Data JPA에서 엔터티 상속을 처리하는 가장 좋은 방법 (0) | 2018.12.22 |