Spring WebClient 根据响应正文抛出错误
Spring WebClient throw error based on response body
我正在使用 Spring WebClient 调用 REST API。我想根据响应抛出错误。例如,如果 body
出现错误 (400)
{"error": "error message1 "}
然后我想用“error message1”抛出一个错误。如果 body
有错误(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) and lambda in onStatus
method should return another 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));
})
);
我正在使用 Spring WebClient 调用 REST API。我想根据响应抛出错误。例如,如果 body
出现错误 (400){"error": "error message1 "}
然后我想用“error message1”抛出一个错误。如果 body
有错误(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) and lambda in onStatus
method should return another 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));
})
);