Spring webclient, использующий возвращаемый тип generi c - PullRequest
0 голосов
/ 14 апреля 2020

Я написал код ниже, я хочу вернуть тип c (ответ класса) в вызове метода вместо JsonNode. Я получаю сообщение об ошибке в вызове bodyToMono, если я использую объект ответа типа c. Итак, как получить ответ типа c с помощью приведенного ниже кода.

 public JsonNode exchange(WebClient webClient, WebClientRequest requestDetails, Class<V> response) throws IOException {
    if (requestDetails.getHttpMethod() == null) {
        requestDetails.setHttpMethod(HttpMethod.GET);
    }
    if (requestDetails.getParams() == null) {
        requestDetails.setParams(new HashMap<>());
    }
    JsonNode result = null;
    try {
        result = webClient
                .method(requestDetails.getHttpMethod())
                .uri(requestDetails.getServiceUrl(), requestDetails.getParams())
                .headers(httpHeaders -> httpHeaders.setAll(requestDetails.getHeaders()))
                .exchange()
                .flatMap(ClientResponse -> ClientResponse.bodyToMono(JsonNode.class))
                .retryWhen(Retry.any()
                        .fixedBackoff(Duration.ofSeconds(5))
                        .retryMax(5))
                .delaySubscription(Duration.ofSeconds(10))
                .block();
    } catch (WebClientResponseException ex) {
        log.error("WebClientResponseException in Webclient call : ", ex.getMessage());
    } catch (Exception ex) {
        log.error("Exception in Webclient call : ", ex.getMessage());
    }
    return result;
}

1 Ответ

0 голосов
/ 14 апреля 2020

Ваша проблема в объявлении метода. Вы положили:

public JsonNode exchange(.......

С этим вы создаете метод с именем "exchange", который возвращает объект JsonNode. Чтобы вернуть объект generi c, необходимо изменить объявление:

public <YourClassObject> exchange(......

. Для этого можно использовать объект класса generi c:

public Object exchange(...

Но при вызове Метод exchante (), вам нужно будет привести результат.

Чтобы избежать подобных проблем, вы можете использовать объект T. Вы можете прочитать здесь , например.

...