spring - Spring WebClient 基于响应体抛出错误
问题描述
我正在使用 Spring WebClient 调用 REST API。我想根据响应抛出一个错误。例如,如果正文出现错误 (400)
{"error": "error message1 "}
然后我想用“error message1”抛出一个错误。如果正文出现错误(400),则方法相同
{"error_code": "100020"}
然后我想用error_cde 100020抛出一个错误。我想以非阻塞的方式来做。
public Mono<Response> webclient1(...) {
webClient.post().uri(createUserUri).header(CONTENT_TYPE, APPLICATION_JSON)
.body(Mono.just(request), Request.class).retrieve()
.onStatus(HttpStatus::isError, clientResponse -> {
//Error Handling
}).bodyToMono(Response.class);
}
解决方案
ClientResponse 的主体应该以反应方式(javadoc)提取,方法中的lambdaonStatus
应该返回另一个Mono
(javadoc)。总结一下,看看下面的例子
onStatus(HttpStatus::isError, response -> response
.bodyToMono(Map.class)
.flatMap(body -> {
var message = body.toString(); // here you should probably use some JSON mapper
return Mono.error(new Exception(message));
})
);
推荐阅读
- java-stream - 根据值对地图集合进行排序
- json - 使用文本文件中的数据更新 JSON 文件中的列表
- javascript - 如何在我的页面中显示我的请求中的数据
- vb.net - 对象未引用未设置为 vb.net 中对象的实例
- php - PHP MongoDB Regex 正在接受部分单词
- c# - 在计算机关闭时运行程序
- assembly - 如何与 CRT 静态链接
- reactjs - 通过修改(映射)redux state 的值来初始化 useState
- c# - C# 音频设备禁用
- azure - 如何使用 MS Graph 在 Azure AD B2C 中自动授予 API 权限批准