首页 > 解决方案 > 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。

标签: spring-bootspring-webclient

解决方案


推荐阅读