webclient抛出错误

qrjkbowd  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(372)

我正在使用springwebclient调用restapi。我想根据响应抛出一个错误。例如,如果body有一个错误(400)

{"error": "error message1 "}

然后我想抛出一个带有“error message1”的错误。如果主体出现错误(400),方法相同

{"error_code": "100020"}

然后我想用error\u 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);
}
xurqigkl

xurqigkl1#

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

相关问题