如何从单声道中获取价值
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;
});
}
我正在尝试从 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;
});
}