【发布时间】:2017-01-10 14:56:35
【问题描述】:
我正在编写一个通用的 REST 客户端,用于不同类型的 DTO。
public abstract class GenericClient<DTO> {
private final Class<DTO> dtoClass;
... ctor which sets dtoClass ...
public DTO getOne(String id) {
...
URI uri = ...
ResponseEntity<DTO> exchange = getRestTemplate()
.exchange(uri, HttpMethod.GET, entity, dtoClass);
return exchange.getBody(); // works
}
public List<DTO> findAll() {
...
URI uri = ...
ResponseEntity<List<DTO>> exchange = getRestTemplate()
.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<DTO>() {});
return exchange.getBody(); // fails with ClassCastException
}
}
这是由几个像这样的具体客户端实现的
public class OneActualDTOClient extends GenericClient<OneActualDTO> {
public OneActualDTOClient(){
super(OneActualDTO.class);
}
}
这编译,getOne 方法工作正常。但是对于findAll,在运行时,类型参数DTO是不可用的,所以exchange方法不能反序列化传入的JSON(据我了解)。
如您所见,我传递了具体的 DTO 类(作为 Class<DTO>)用于交换单个元素(getOne)。
我应该如何将 ParameterizedTypeReference 传递给 exchange 方法,以便在运行时知道返回为 List<OneActualDTO>?
【问题讨论】:
标签: java spring generics resttemplate