Я использую RestTemplate и сейчас перехожу на использование WebClient. Теперь я пишу обертку вокруг WebClient и сталкиваюсь с этой проблемой. Сначала позвольте мне показать вам, как у меня есть обертка, написанная вокруг resttemplate.
/**
* Build the local map of HttpClientParamRefType as key to the ParameterizedTypeReference as value
*/
private final static Map<HttpClientParamRefType,ParameterizedTypeReference> paramTypeRefMap = new HashMap<>() ;
static {
paramTypeRefMap.put(HttpClientParamRefType.DATA_RESOURCE, new ParameterizedTypeReference<List<DataResource>>(){} );
paramTypeRefMap.put(HttpClientParamRefType.GENERIC, new ParameterizedTypeReference<String>(){} );
}
.
.
.
public ResponseEntity doGet (uri, HttpClientParamRefType type){
try{
return restTemplate.exchange(uri, HttpMethod.GET, httpEntity, paramTypeRefMap.get(httpClientParamRefType) );
}catch(HttpServerErrorException e){
// Handling errors
}
}
Приведенный выше фрагмент кода работает нормально. Я пытаюсь сделать то же самое с WebClient. Я не могу передать ParameterizedTypeReference из карты в bodyToMono (). Это работает, только если я передаю его напрямую.
public List<DataResource> getLens(HttpClientParamRefType httpClientParamRefType){
// dlClient is initialized, nothing too special; just setting json
return this.dlClient.get()
.uri(datalensControlplaneUrl + "/resource?resourceType=" + SchemaType.DRUID.getName())
.retrieve()
.bodyToMono(paramTypeRefMap.get(httpClientParamRefType))
// .bodyToMono(new ParameterizedTypeReference<List<DataResource>>(){}) // <----- This works!
.block();
}
Есть идеи, как заставить это работать? Точная ошибка, которую я получаю, это -
Error:(54, 23) java: incompatible types: capture#1 of ? cannot be converted to java.util.List<x.x.x.x.x.DataResource>