Проблема с ParameterizedTypeReference с WebClient. Ожидаемый список ; найден захват - PullRequest
0 голосов
/ 08 января 2020

Я использую 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>
...