为Feign客户端自定义ErrorDecoder
摘要:重写Feign的错误解码器ErrorDecoder,以自定义业务逻辑。
ErrorDecoder,顾名思义,它是发生错误或者异常情况时使用的一种解码器,允许我们对异常进行特殊处理。
在配置Feign客户端时,通过自定义错误解码器ErrorDecoder可以让我们自由自在地决定如何处理来自服务器的错误响应。下面是一个结合实战代码的、简单的操作指南,帮助你实现自定义的ErrorDecoder。
集成 OpenFeign 的ErrorDecoder
实现ErrorDecoder接口: 首先,你需要创建一个类实现ErrorDecoder接口,并重写decode方法。在这个方法中,你可以根据响应状态码和内容来决定抛出什么样的异常,甚至可以打印日志。
import feign.Response;
import feign.codec.ErrorDecoder;
public class CustomErrorDecoder implements ErrorDecoder {
private static final Default defaultDecoder = new ErrorDecoder.Default();
@Override
public Exception decode(String methodKey, Response response) {
switch (response.status()) {
case 400:
// 打印日志
return new BadRequestException("Bad Request");
case 404:
// 不打印日志
return new NotFoundException("Not Found");
default:
return defaultDecoder.decode(methodKey, response);
}
}
}
错误解码器实现逻辑简单,根据Http响应码来判断抛出什么类型的异常。 在定制处理特殊的状态码或者异常类型之后,个人建议如上述示例使用ErrorDecoder.Default()兜底,提升稳定性。
配置Feign客户端: 在你的Feign客户端配置中,注册这个自定义的ErrorDecoder bean。你如果使用的是Spring Cloud Feign(现为OpenFeign),可以通过配置类来指定CustomErrorDecoder:
import org.springframework.context.annotation.Bean;
public class MyFeignConfig {
private static final CustomErrorDecoder defaultErrorDecoder = new CustomErrorDecoder();
@Bean
public ErrorDecoder errorDecoder() {
return new defaultErrorDecoder;
}
}
把配置应用到Feign客户端: 在Feign客户端接口上,使用@FeignClient注解的configuration属性来指定配置类MyFeignConfig。代码如下:
import com.cloud.isavana.trafficdispatch.config.FeignCodeFilterConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import java.net.URI;
@FeignClient(name = "my-FeignClient", configuration = MyFeignConfig.class, , url = "EMPTY")
public interface MyFeignClient {
/**
* 使用get方法访问uri
*/
@GetMapping()
String callEndpoint(URI uri);
}
结束语
通过以上步骤,你就能够在Feign客户端中自定义错误处理逻辑,以更好地管理和响应不同的HTTP错误状态,调控什么时候打印日志。
关于Feign的错误解码器就介绍到这了。本文内容通俗易懂,但因为使用场景少的原因,各位老铁可能会觉得生疏。希望本文能够帮你在定制ErrorDecoder时,变得游刃有余。
如果你还有其它问题或者需要楼兰胡杨进一步的帮助,请随时告诉我!祝你拥有美好的一天!
为Feign客户端自定义ErrorDecoder的更多相关文章
- Feign 自定义 ErrorDecoder (捕获 Feign 服务端异常)
问题描述 Feign 客户端捕获不到服务端抛出的异常 问题解决 重新 ErrorDecoder 即可,比如下面例子中在登录鉴权时想使用认证服务器抛出 OAuth2Exception 的异常,代码如下: ...
- Feign实现自定义错误处理
关键操作 实现ErrorDecoder接口 问题和背景 最近项目中在大量使用Feign和OkHttp作为http客户端使用,开发效率得到显著的提升.但也面临一些问题,比如每个下游系统的异常返回方式不同 ...
- Feign 客户端的使用 二
一.Feign的使用(客户端调用 json/xml格式的接口) 1.服务端接口编写 <parent> <groupId>org.springframework.boot< ...
- [原创]如何让freeswitch转发客户端自定义的INFO消息
如何让freeswitch转发客户端自定义的INFO消息 英文概述: this article is about how to configure freeswitch to forward self ...
- Spring Cloud之Feign客户端超时时间配置
关于雪崩效应: 默认情况下tomcat只有一个线程去处理客户端发送的所有请求.高并发情况下,如果客户端请求都在同一接口,tomcat的所有线程池去处理,导致其他接口服务访问不了,等待. Tomcat有 ...
- Spring Cloud之Feign客户端调用工具
feign介绍 Feign客户端是一个web声明式http远程调用工具,提供了接口和注解方式进行调用. Spring Cloud 支持 RestTemplate Fetin Feign客户端实际开发 ...
- Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决
timed-out and no fallback available: 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该服务能不能通,如果通了就不管了,调用在指定时间内超时时,就会通过 ...
- 【Feign】自定义配置
[Feign]自定义配置 转载: 自定义配置,如果在同一个工程,注意配置不要和@SpringBootApplication或@ComponentSacan放在用一个包下,就是不要被扫描上 packag ...
- Feign 客户端调用错误
1.@RequestBody 必须要写在实现接口中 2.Feign 客户端调用的时候如果有参数的话,默认是发送post请求 3.服务接口中的请求参数必须要加上@RequestParam("r ...
- Springcloud 整合Hystrix 断路器,支持Feign客户端调用
1,在这篇博文中,已经大致说过了Springcloud服务保护框架 Hystrix在服务隔离,服务降级,以及服务熔断中的使用 https://www.cnblogs.com/pickKnow/p/11 ...
随机推荐
- 李沐动手学深度学习V2-chap_preliminaries
李沐动手学深度学习V2 文章内容说明 本文主要是自己学习过程中的随手笔记,需要自取 课程参考B站:https://space.bilibili.com/1567748478?spm_id_from=3 ...
- libvirt和qga的区别?
本文分享自天翼云开发者社区<libvirt和qga的区别?>,作者:乐道 Libvirt是一个开源项目,提供了一组API.工具.库,用于管理和控制虚拟化平台. 在Openstack环境中, ...
- Golang 入门 : 符文
字符串常用语表示一系列文本字符,而Go的符文(rune)则用于表示单个字符. 字符串字面量由双引号(")包围,但rune字面量由单引号(')包围. Go程序几乎可以使用地球上任何语言的任何字 ...
- Netty源码—1.服务端启动流程
大纲 1.服务端启动整体流程及关键方法 2.服务端启动的核心步骤 3.创建服务端Channel的源码 4.初始化服务端Channel的源码 5.注册服务端Channel的源码 6.绑定服务端端口的源码 ...
- Windows 提权-服务_DLL 劫持
本文通过 Google 翻译 DLL Hijacking – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. ...
- HoloLens2 开发推荐配置
博客地址:https://www.cnblogs.com/zylyehuo/ 1.win11 pro+vs2019+unity2018+MRTK2.6.1 2.win10 pro+vs2019+uni ...
- MySQL-脏页的刷新机制
MySQL内存结构-缓冲区 MySQL的缓冲区中有数据页,索引页,插入缓冲等等,这个角度是从页的功能来分类的.本小节从另一个视角关注这些页,如果从 是否被修改过(和磁盘不一致) 这个角度来区分这些页, ...
- 一款 .NET 开源、免费、轻量级且非侵入性的防火墙软件
前言 在当今数字化时代,系统服务器网络安全已成为我们日常生活和工作中不可忽视的重要议题.随着网络威胁的日益复杂和多样化,选择一款高效.可靠且易于使用的防火墙软件显得尤为重要.今天大姚给大家分享一款 . ...
- selenium IDE简单使用
selenium IDE可理解为录制操作浏览器的过程,然后回放实现UI级的自动化 一,首先安装,本案例主要在谷歌浏览器上使用,所以用的是支持谷歌的IDE文件 下载,打开https://www.crx4 ...
- 什么是 Java 中的 logging write barrier?
什么是 Java 中的 Logging Write Barrier? Logging Write Barrier 是 Java 垃圾回收器在维护堆引用关系时常用的一种机制.它是一种特殊的写屏障(Wri ...