【问题标题】:Spring WebClient throw error based on response bodySpring WebClient 基于响应体抛出错误
【发布时间】:2021-06-02 22:49:38
【问题描述】:

我正在使用 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);
}

【问题讨论】:

    标签: spring spring-webflux spring-webclient


    【解决方案1】:

    应该以反应方式提取来自 ClientResponse 的主体(javadoc)onStatus 方法中的 lambda 应该返回另一个 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));
        })
    );
    

    【讨论】:

      猜你喜欢
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2020-12-26
      相关资源
      最近更新 更多