OpenFeign 自定义结果转换

这篇具有很好参考价值的文章主要介绍了OpenFeign 自定义结果转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Cloud OpenFeign定义的客户端调用远程服务时,默认的解码器只能按照定义的方法返回类型对接口的返回结果进行强制转换,没办法实现一些自定义的逻辑,比如将统一返回的Result类重新拆开,仅返回对应的业务对象,或者对特定的响应码进行处理等等。

public class FeignResultDecoder implements Decoder {

    @Override
    public Object decode(Response response, Type type) throws IOException, DecodeException, FeignException {
        if (response.body() == null) {
            throw new DecodeException(response.status(), "没有返回有效的数据", response.request());
        }
        String bodyStr = Util.toString(response.body().asReader(Util.UTF_8));
        if(StringUtils.isNotEmpty(bodyStr)){
            //对结果进行转换
            Result result = FeignResultDecoder.json2obj(bodyStr, type);
            可以处理成自己需要返回的类
           return result;
        }
        return null;
    }

    public static <T> T json2obj(String jsonStr, Type targetType) {
        try {
            JavaType javaType = TypeFactory.defaultInstance().constructType(targetType);
            return new ObjectMapper().readValue(jsonStr, javaType);
        } catch (IOException e) {
            throw new IllegalArgumentException("将JSON转换为对象时发生错误:" + jsonStr, e);
        }
    }

}

config配置:

实现了Decoder之后,只需要将其配置到CustomizedConfiguration中即可,注意如果CustomizedConfiguration添加了@Configuration的注解,则会成为Feign Client构建的默认配置,这样就不需要在每个@FeignClient注解中都去指定配置类了:


public class CustomizedConfiguration {
    @Bean
    public Decoder feignDecoder() {
        return new FeignResultDecoder();
    }
}

在对应的feign上做计入处理

@FeignClient(name = "TestFeign ", configuration = CustomizedConfiguration.class, fallback = TestFeign FallBack.class)
public interface TestFeign {
    @GetMapping("/getById")
    BaseResponseDto<TestDto> getById(@RequestBody RequestDto<TokenDto> requestDto);
}

类似的方式,我们还可以自定义Feign的Encoder,ErrorDecoder等关键配置组件。

注意:

        这种配置的方式仅限于用注解@EnableFeignClients("xxxx")自动扫描的类@FeignClient注解,如果我们是使用FeignClientBuilder自定义返回的就无法使@FeignClient中的配置name,configuration,url等配置自动生效。文章来源地址https://www.toymoban.com/news/detail-592811.html

到了这里,关于OpenFeign 自定义结果转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Solon 统一的返回结果调整

    使用 “统一的渲染控制” 可以对输出做统一的控制外。。。还可以借助路由拦截器 RouterInterceptor ,对 mvc 返回结果做提交确认机制(即可修改)进行控制(相对来讲,这个可能更简单)。。。 关于全局的请求异常处理,最好不要放在这里。。。放到过滤器(因为它是最外层

    2024年02月03日
    浏览(9)
  • SpringBoot项目整合OpenFeign、实现动态IP+URL请求、自定义(编码器\解码器)

    OpenFeign 是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中. 启动类加上注解: @EnableDiscoveryClient 动态URL 工具类: FeignUtils.class

    2024年02月02日
    浏览(16)
  • Spring Boot进阶(45): Spring Boot 开发必备技能:如何优雅地返回统一结果包装!

            在实际的开发中,我们常常需要对 API 接口的返回结果进行统一的包装,以方便客户端的处理和异常情况的统一处理。例如,我们可能需要对 API 接口返回结果进行统一的格式处理,将所有的异常情况都转化为统一的错误类型,同时也可能需要对返回结果进行统一的加

    2024年02月07日
    浏览(16)
  • SpringCloud OpenFeign 全功能配置详解(一文吃透OpenFeign)

    SpringCloud OpenFeign 全功能配置详解(一文吃透OpenFeign)

    OpenFeign客户端是一个web声明式http远程调用工具,直接可以根据服务名称去注册中心拿到指定的服务IP集合,提供了接口和注解方式进行调用,内嵌集成了Ribbon本地负载均衡器。 1、底层都是内置了Ribbon,去调用注册中心的服务。 2、Feign是Netflix公司写的,是SpringCloud组件中的一

    2024年02月07日
    浏览(9)
  • 【OpenFeign】OpenFeign结合Hystrix和Sentinel实现熔断降级

    OpenFeign可以与Hystrix和Sentinel结合使用,实现降级和熔断。 使用OpenFeign需要引入OpenFeign的依赖: spring-cloud-starter-openfeign 引入的依赖如下: 默认已经自动引入了hystrix的依赖,不再需要单独再引入hystrix了。 降级方法的类需要实现FeignClient的接口,同时这个类需要注入到Spring容器

    2024年02月11日
    浏览(17)
  • SpringCloud入门(微服务调用 OpenFeign)——从RestTemplate到OpenFeign & OpenFeign的相关配置 & 源码的分析和请求流程拆解

    SpringCloud入门(微服务调用 OpenFeign)——从RestTemplate到OpenFeign & OpenFeign的相关配置 & 源码的分析和请求流程拆解

    在之前的博客中,我们介绍了RestTemplate的使用,博客文章如下连接。但是在使用RestTemplate的时候,需要把生产者的路径拼出来,非常繁琐,另外参数的传递的也比较繁琐,解决方案就是使用openFeign。 SpringCloud入门(RestTemplate + Ribbon)——微服务调用的方式 RestTemplate的使用 使

    2024年04月11日
    浏览(13)
  • 【openfeign】OpenFeign的扩展、日志、超时时间、拦截器、客户端组件、压缩

    有时候我们遇到Bug,比如接口调用失败、参数没收到等问题,或者想看看调用性能,就需要配置Feign的日志了,以此让Feign把请求信息输出来。 定义一个配置类,指定日志级别: 通过源码可以看到日志等级有4种,分别是: NONE:不记录任何日志(默认值),性能最佳,适用于

    2024年02月12日
    浏览(15)
  • Java调用参数为xml格式的接口,分析转换返回结果

    Java调用参数为xml格式的接口,分析转换返回结果

    最近第一次接触到xml格式的接口,以下是自己编写的经验,铁汁们可以参考自己的项目自行修改。 完整代码已附在文章末尾,如有缺陷,欢迎评论区或私信交流。 首先向接口提供方申请了接口文档,包含了接口地址和参数信息,先使用postman工具调用接口,分析参数和返回值

    2024年02月10日
    浏览(13)
  • mybatis处理返回结果集

    mybatis处理返回结果集

    1 简单类型输出映射 返回简单基本类型 返回结果需要定义后才能使用简称 eg:resultType=\\\"Admin\\\" 已经定义过别名了,所以就可以使用简称 那么java中其它常用类型简称如何使用?(不使用简称就需要用全类名,eg:java.util.List) 在mybatis底层源码中定义了一些常用的类型的简称 也可以

    2024年02月13日
    浏览(12)
  • Spring Boot 优雅实现统一数据返回格式+统一异常处理+统一日志处理

    Spring Boot 优雅实现统一数据返回格式+统一异常处理+统一日志处理

            在我们的项目开发中,我们都会对数据返回格式进行统一的处理,这样可以方便前端人员取数据,当然除了正常流程的数据返回格式需要统一以外,我们也需要对异常的情况进行统一的处理,以及项目必备的日志。         在项目开发中返回的是json格式的数据

    2024年01月19日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包