Spring 5 WebClient - метод получения не распознается с помощью Groovy, но работает с java

Я использую groovy, spring5, springboot2, и я пытался заменить Resttemplate на 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. Кто-нибудь сталкивается или имеет какие-то мысли?


person Bhargav    schedule 21.05.2019    source источник
comment
Код Groovy компилируется за меня. Не могли бы вы привести полный и минимальный пример, воспроизводящий проблему компиляции?   -  person Andy Wilkinson    schedule 29.05.2019
comment
@AndyWilkinson Вот пример проекта, и я использую intellij в качестве своей IDE github.com/BhargavModepalli/WebClinet-Example/blob/master/src/   -  person Bhargav    schedule 29.05.2019


Ответы (1)


Кажется, ваша проблема вызвана ошибкой в ​​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()
person Andy Wilkinson    schedule 29.05.2019