Spring 5 WebClient - метод извлечения не распознается Groovy, но работает с Java - PullRequest
1 голос
/ 21 мая 2019

Я использую groovy, spring5, springboot2, и я пытался заменить Resttemplate на InCorent WebClient, чтобы сделать некоторые синхронные вызовы HTTP (REST). Retrieve () в webClient.get().uri("").retrieve() не распознается (ошибка компиляции) в .groovy, тогда как тот же код работает в .java

WebClientJava.java


import org.springframework.web.reactive.function.client.WebClient;

public class WebClientJava {

    String retriever(){

        WebClient webClient = WebClient.create();

       String responsess =  webClient.get().uri("").retrieve().bodyToMono(String.class).block();


        return responsess;
    }
}

WebClientGroovy.groovy

import org.springframework.web.reactive.function.client.WebClient

class WebClientGroovy {

    String retriever(){

        WebClient webClient = WebClient.create()

        WebClient.RequestHeadersSpec responsess = webClient.get().uri("").retrieve().bodyToMono(String.class).block()

        return responsess
    }
}

Я ожидаю, что он работает с Groovy, как он работает с Java. Кто-нибудь сталкивается или имеет какие-либо мысли?

1 Ответ

1 голос
/ 29 мая 2019

Похоже, что ваша проблема вызвана ошибкой в ​​IntelliJ IDEA, поскольку пример проекта успешно строится в командной строке с Maven.

Метод uri возвращает S, где S определяется как S extends RequestHeadersSpec<?>. Похоже, IDE не может справиться с этим и считает, что имеет дело с ?, к которому относится java.lang.Object. Я бы порекомендовал сообщить о проблеме в JetBrains .

Тем временем вы можете обойти эту проблему, приведя к возврату значение uri:

String responses = ((WebClient.RequestHeadersSpec)webClient.get().uri(""))
        .retrieve().bodyToMono(String.class).block()
...