Webclient ExchangeFilter 不是 return 定义的自定义异常 class
Webclient ExchangeFilter not return a defined custom exception class
我在执行 Web 客户端请求(向外部 api)并且响应是 4xx 或 5xx 代码时遇到问题。提议正在处理该响应并使用自定义 class
检索响应
网络客户端配置为
return WebClient.builder()
.baseUrl(baseUrl)
.defaultHeaders(httpHeaders -> {
httpHeaders.setBearerAuth("token");
httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
})
.filter(handlingFilter())
.build();
}
handlingFilter.class
private static ExchangeFilterFunction handlingFilter() {
return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
if(clientResponse.statusCode()!=null && (clientResponse.statusCode().is5xxServerError() || clientResponse.statusCode().is4xxClientError()) ) {
return Mono.error(new MyException(clientResponse.statusCode().value(), clientResponse.statusCode().getReasonPhrase()));
}else {
return Mono.just(clientResponse);
}
});
}
MyExpcetion.class
public class MyException extends Exception{
private int code;
private String message;
public MyException(String message) {
super(message);
}
}
但我的客户回复总是给我一个默认格式
{
"timestamp": "x",
"path": "x",
"status": "x",
"error": "x",
"message": "x",
"requestId": "x",
}
而不是
{
"code": "x",
"message": "x"
}
怎么了?
谢谢
要更改客户端的响应(端点的响应),您必须正确处理异常。查看 Spring 有关 Managing Exceptions
的文档
正在恢复:如果您正在使用注释端点,则必须在您的控制器 class 或 @RestControllerAdvice
.
中创建一个 @ExceptionHandler(MyException.class)
如果您使用的是功能终结点,则配置 WebExceptionHandler
我在执行 Web 客户端请求(向外部 api)并且响应是 4xx 或 5xx 代码时遇到问题。提议正在处理该响应并使用自定义 class
检索响应网络客户端配置为
return WebClient.builder()
.baseUrl(baseUrl)
.defaultHeaders(httpHeaders -> {
httpHeaders.setBearerAuth("token");
httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
})
.filter(handlingFilter())
.build();
}
handlingFilter.class
private static ExchangeFilterFunction handlingFilter() {
return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
if(clientResponse.statusCode()!=null && (clientResponse.statusCode().is5xxServerError() || clientResponse.statusCode().is4xxClientError()) ) {
return Mono.error(new MyException(clientResponse.statusCode().value(), clientResponse.statusCode().getReasonPhrase()));
}else {
return Mono.just(clientResponse);
}
});
}
MyExpcetion.class
public class MyException extends Exception{
private int code;
private String message;
public MyException(String message) {
super(message);
}
}
但我的客户回复总是给我一个默认格式
{
"timestamp": "x",
"path": "x",
"status": "x",
"error": "x",
"message": "x",
"requestId": "x",
}
而不是
{
"code": "x",
"message": "x"
}
怎么了? 谢谢
要更改客户端的响应(端点的响应),您必须正确处理异常。查看 Spring 有关 Managing Exceptions
的文档正在恢复:如果您正在使用注释端点,则必须在您的控制器 class 或 @RestControllerAdvice
.
@ExceptionHandler(MyException.class)
如果您使用的是功能终结点,则配置 WebExceptionHandler