Spring Cloud Feign ErrorDecoder-错误解码器的自定义
ErrorDecoder-错误解码器的自定义Feign 的默认错误处理程序ErrorDecoder.default总是抛出FeignException。现在,这种行为并不总是最有用的。因此,要自定义抛出的异常,我们可以使用*CustomErrorDecoder*:public class CustomErrorDecoder implements ErrorDecoder {@Overridepu
·
ErrorDecoder-错误解码器的自定义
Feign 的默认错误处理程序ErrorDecoder.default总是抛出FeignException。
现在,这种行为并不总是最有用的。因此,要自定义抛出的异常,我们可以使用*CustomErrorDecoder*:
public class CustomErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
switch (response.status()){
case 400:
return new BadRequestException();
case 404:
return new NotFoundException();
default:
return new Exception("Generic error");
}
}
}
过向*@Configuration类添加一个 bean 来替换默认的ErrorDecoder*:
@Configuration
public class ClientConfiguration {
@Bean
public ErrorDecoder errorDecoder() {
return new CustomErrorDecoder();
}
}
当feign调用返回HTTP报文时,会触发这个方法,方法内可以获得HTTP状态码,可以用来定制一些处理逻辑等等。
@Bean
public ErrorDecoder feignError() {
return (key, response) -> {
if (response.status() == 400) {
log.error("请求xxx服务400参数错误,返回:{}", response.body());
}
if (response.status() == 409) {
log.error("请求xxx服务409异常,返回:{}", response.body());
}
if (response.status() == 404) {
log.error("请求xxx服务404异常,返回:{}", response.body());
}
// 其他异常交给Default去解码处理
// 这里使用单例即可,Default不用每次都去new
return new ErrorDecoder.Default().decode(key, response);
};
}
采用了lambda的写法,response变量是Response类型,通过status()方法可以拿到返回的HTTP状态码,body()可以获得到响应报文。
更多推荐
已为社区贡献9条内容
所有评论(0)