Java 无阻塞地将单声道转换为Pojo
有没有办法将Mono对象转换为JavaPOJO? 我有一个web客户端连接到第三方REST服务,我没有返回Java 无阻塞地将单声道转换为Pojo,java,spring-webflux,project-reactor,web-client,Java,Spring Webflux,Project Reactor,Web Client,有没有办法将Mono对象转换为JavaPOJO? 我有一个web客户端连接到第三方REST服务,我没有返回Mono,而是提取该对象并查询它 我找到的所有示例都返回Mono,但我必须得到Pojo本身。目前,我在Pojo上调用block(),但是有没有更好的方法来避免阻塞 块的问题是,在运行了几次之后,它开始抛出一些错误,比如以错误终止的块 public MyPojo getPojo(){ return myWebClient.get() .uri(gen
Mono
,而是提取该对象并查询它
我找到的所有示例都返回Mono,但我必须得到Pojo本身。目前,我在Pojo上调用block()
,但是有没有更好的方法来避免阻塞
块的问题是,在运行了几次之后,它开始抛出一些错误,比如以错误终止的块
public MyPojo getPojo(){
return myWebClient.get()
.uri(generateUrl())
.headers(createHttpHeaders(headersMap))
.exchange()
.flatMap(evaluateResponseStatus())
.block();
}
private Function<ClientResponse, Mono<? extends MyPojo>> evaluateResponseStatus() {
return response -> {
if (response.statusCode() == HttpStatus.OK) {
return response.bodyToMono(MyPojo.class);
}
if (webClientUtils.isError(response.statusCode())) {
throw myHttpException(response);
// This invokes my exceptionAdvice
// but after few runs its ignored and 500 error is returned.
}
return Mono.empty();
};
}
public MyPojo getPojo(){
返回myWebClient.get()
.uri(generateUrl())
.Header(createHttpHeaders(headersMap))
.exchange()
.flatMap(evaluateResponseStatus())
.block();
}
私有函数在反应流中阻止对值进行操作不是一个好主意。ProjectReactor为您提供了一系列操作符供您处理流中的对象
在您的情况下,可以编写getPojo()
方法,如:
public Mono<MyPojo> getPojo() {
return myWebClient.get()
.uri(generateUrl())
.headers(createHttpHeaders(headersMap))
.retrieve()
.onStatus(status -> webClientUtils.isError(status),
response -> Mono.error(myHttpException(response))
.bodyToMono(MyPojo.class)
}
我强烈建议您查看项目中的Reactor文档。在反应流中阻止对值进行操作不是一个好主意。ProjectReactor为您提供了一系列操作符供您处理流中的对象
在您的情况下,可以编写getPojo()
方法,如:
public Mono<MyPojo> getPojo() {
return myWebClient.get()
.uri(generateUrl())
.headers(createHttpHeaders(headersMap))
.retrieve()
.onStatus(status -> webClientUtils.isError(status),
response -> Mono.error(myHttpException(response))
.bodyToMono(MyPojo.class)
}
我强烈建议您查看项目反应堆文档。谢谢MuratOzkan。。我会试试的。。虽然我不想返回Mono,但它必须是MyPojo,所以我想我可以在返回之前使用map(pojo->)?如果您能在上下文中添加更多细节,那就太好了。但总的来说,阻塞流不是一个好主意,必须避免。是的,我理解并希望避免阻塞。上下文是获取MyPojo并返回它,而不是返回Mono。MyPojo的一个字段进一步用于在值为null时引发异常。我的意思是,您试图实现什么?通常不需要返回对象,而是使用反应式操作。也许你误解了什么,对吧。。。我将尝试这些操作。非常感谢你的帮助。。我会试试的。。虽然我不想返回Mono,但它必须是MyPojo,所以我想我可以在返回之前使用map(pojo->)?如果您能在上下文中添加更多细节,那就太好了。但总的来说,阻塞流不是一个好主意,必须避免。是的,我理解并希望避免阻塞。上下文是获取MyPojo并返回它,而不是返回Mono。MyPojo的一个字段进一步用于在值为null时引发异常。我的意思是,您试图实现什么?通常不需要返回对象,而是使用反应式操作。也许你误解了什么,对吧。。。我将尝试这些操作。非常感谢你的帮助。