如何从单声道中获取价值

How to get value out of mono

我正在尝试从 Mono 中提取 String

单声道方法:

public Mono<String> getVal() {
    return webClient.get()
        .uri("/service") 
        .retrieve()
        .bodyToMono(String.class);
}

呼叫 getVal():

String val = getVal().block();

我尝试使用 block() 但 returns 出现以下错误:

java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, 
which is not supported in thread reactor-http-nio-3

我想我必须使用像 subscribe() 这样的非阻塞方法,但我不确定该怎么做。

Ghokun 有更好的答案。但是如果有人想使用阻塞方法:

我修改了我的getVal()方法:

public String getVal() {
    String response = "";

        try {
            response = webClient.get()
                .uri("/service") 
                .retrieve()
                .bodyToMono(String.class)
                .toFuture()
                .get();
            
        } catch (Exception e) 
        {
            System.out.println(e.getMessage());
            
        }
                
        return response;
}

如果您使用的是响应式编程,请尽量避免阻塞调用并使用已有的功能。

public Mono<String> getVal() {
    return webClient.get()
        .uri("/service") 
        .retrieve()
        .bodyToMono(String.class)
        .map(str ->  {
          // You have your string unwrapped here
          return str;
        });
}