spring-boot - Spring webclient POST方法 - 错误处理
问题描述
我有一个公开 POST 服务的 Spring webflux 服务。
RouterFunctions
.route(POST("/api/v1/service/order").and(accept(APPLICATION_JSON)), handler::submitOrder)
处理程序代码
这里调用远程服务如下。
public Mono<ServerResponse> submitOrder(final ServerRequest request) {
try {
return orderService.submitOrder(orderDto, order.getOrderId(),
setting.getClientId()).flatMap(orderNum -> {
return noContent().build();
});
} catch (WebClientException e) {
return ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
服务代码
public Mono<ClientResponse> submitOrder(final OrderDto orderDto,
return webClient.post().uri(BASE_URL + "/api/v1/orders").contentType(MediaType.APPLICATION_XML)
.bodyValue(report).retrieve().bodyToMono(ClientResponse.class);
}
远程服务返回 201 表示成功,返回 4xx 表示错误并显示错误消息。
错误信息
<error>
<message context="GLOBAL">Invalid order value</message>
</error>
我不确定如何阅读远程服务错误消息并将其发送给客户端。上面的代码捕获异常并返回 500。
解决方案
推荐阅读
- image - 使用 Graphql 和 apollo 服务器上传图像时面临问题
- php - 通过 smtp 发送的邮件未显示在邮件服务器的已发送文件夹中
- charts - 如何从 canvasjs 中的选项加载新图表?
- elasticsearch - 嵌入式弹性搜索上的查询请求删除返回错误
- python - 如何在 Dnago 中使用户名字段不区分大小写?我的实施正确吗?
- python - 包含任意位数的字节对象
- c++ - direct3d9如何过滤像素艺术的纹理
- hawtio - 我正在使用 Hawtio(2.7.1) stanalone jar 并尝试在其中添加新插件。但它显示一个错误
- javascript - Find k number of array elements having the minimum difference amongst themselves
- swift - SwiftUI:调整弹出框以适合