Java Spring Boot框架-WebClient记录4xx/5xx主体响应



我是Spring Boot框架的WebClient的新手。如何只在出现错误时记录4xx/5xx及其错误体,但成功后,将clientResponse作为String返回,然后我们可以使用gson对其进行序列化?


String postResponse =
post(
ENDPOINT,
token,
request,
Request.class);
Response response = gson.fromJson(postResponse, Response.class);

private String post(String endpoint, String token, Mono<?> requestBody, Class<?> requestBodyClass) {
WebClient.Builder webClientBuilder = WebClient.builder();
WebClient.RequestBodySpec requestBodySpec = webClientBuilder.build().post().uri(uri);
requestBodySpec.header(
"Authorization", BEARER_TOKEN_PREFIX + this.accessTokens.get(token));
return requestBodySpec
.header("Content-Type", HEADER_VALUE_CONTENT_TYPE)
.body(Mono.just(requestBody), requestBodyClass)
.retrieve()
.bodyToMono(String.class)
.block();
}

我可以建议一些类似的东西吗:

private String post(String endpoint, String token, Mono<?> requestBody, Class<?> requestBodyClass) {
Mono<String> stringMono = WebClient.builder().build()
.post()
.uri(endpoint)
.body(BodyInserters.fromValue(requestBodyClass))
.exchange()
.flatMap(SomeServiceImpl::getResultAsStringOrLog4xx5xx);

//get the JSON from the Mono, but you might not want to block
}

(我省略了标题(

这个问题的实际答案是,用类似的东西执行日志记录:

private static Mono<String> getResultAsStringOrLog4xx5xx(ClientResponse response) {
if (response.statusCode().is2xxSuccessful()) {
return response.bodyToMono(String.class);
} else if (response.statusCode().is5xxServerError()) {
Logger.error(); //up to you
} else {
//at this point, you can have your logic on error code
}
return
}

还有其他方法可以做到这一点,希望这能让你开始。

此外,请尽量不要在应用程序中阻止((。

谢谢

最新更新