Fegin远程调用-传递Reponse的情况解决

SpringCloud - OpenFeign 参数传递和响应处理(全网最详细) 因为 openfeign 是 伪HttpClient 对象,我们在远程调用他的客户端提供的接口时,并不知道你到底是路径传参还是问号传参,因此需要通过注解的方式来指明传参方式(就像 Spring Web 一样,只不过 Spring Web 中如果没指明传参类型,底层会按默认方式走,而 openfeign 则没有).然而,需要注意的是,OpenFeign 只能处理简单的 Java 对象和 Map 对象,对于复杂的 Java 对象或包含特殊类型的对象,可能无法自动进行正确的序列化和反序列化。 阅读详情

背景

不同模块之间,如果需要远程调用下载表格的接口,需要使用reponse来将表格流进行远程传递,但是如果直接使用HttpServletResponse作为参数传递的话,会报类型转换异常或者其他异常情况,导致reponse无法传递。

解决办法

使用Feign原生的 feign.Response 做返回,调用方解析Response,写入自己响应流

1.fegin包中的Reponse:
在这里插入图片描述
详细流程

1.被调用方代码
在这里插入图片描述
2.Fegin调用

在这里插入图片描述

3.调用方代码

在这里插入图片描述
重点需要一个将Fegin的Reponse转换为普通HttpServletResponse的方法,在这里是 feignResp2ServletResp(workBook, response) 方法

代码如下:

    /**
     * Fegin的Response转换为Servlet的Response
     *
     * @param feignResponse feignResponse
     * @param response      response
     * @throws IOException IOException
     */
    public static void feignResp2ServletResp(Response feignResponse, HttpServletResponse response) throws IOException {
        Response.Body body = feignResponse.body();
        try (InputStream inputStream = body.asInputStream(); OutputStream outputStream = response.getOutputStream()) {
            response.setHeader(HttpHeaders.CONTENT_DISPOSITION, feignResponse.headers().get(HttpHeaders.CONTENT_DISPOSITION).stream().findFirst().get());
            response.setContentType(feignResponse.headers().get(HttpHeaders.CONTENT_TYPE).stream().findFirst().get());
            IOUtils.copy(inputStream, outputStream);
        }
    }

方法内引入的包都是java原生的或者Fegin的包。

参考链接:添加链接描述

– 完结 –

移花接木,玩转CANoe的几种扩展接口应用(五)——串口设备 近期看到粉丝朋友在CANoe自动化测试方面的关注度很大,今天就围绕这个做一个专题,总结一下以往项目上用过的几种CANoe扩展接口,分享出来希望对相关领域的网友有所帮助。本文是该专题的第五篇文章,主要讲解了串口设备的功能配置、连接方法、配置方法、调用方法,最后分析了这种扩展借口应用的特点和适用场景。 阅读详情

相关推荐

Amos实战:如何用Bootstrap法检验中介效应?附完整操作步骤

本文详细介绍了如何使用Amos软件通过Bootstrap法检验中介效应,包括模型设定、参数配置和结果解读。Bootstrap方法因其不依赖正态分布假设、统计功效高等优势,成为中介效应分析的首选方法。文章提供了完整的操作步骤和实用建议,帮助研究者准确评估变量间的中介作用机制。

zz67890的博客 1442

解决Feign无法传递HttpServletResponse

我们在做响应流导出的时候,但是导出功能的提供方为下游服务,我进行feign调用。提供方正常代码编写 这么写会报错的。调用方的HttpServletResponse 无法传递我们这里使用Feign原生的 feign.Response 做返回,调用方解析Response,写入自己响应流中。show code 调用方 注意 若采用此种方法,feign的异常将不会走自定义的异常处理机制,源码如下...

hello__word__的博客 7416

【TiktokAPI】Tiktok直播API与实时互动功能开发完全指南

Tiktok直播API允许开发者创建、管理直播,并实现各种互动功能。/*** 获取Tiktok直播API访问令牌* @param {string} client_id - 应用ID* @param {string} client_secret - 应用密钥* @param {string} code - 授权码* @param {string} redirect_uri - 重定向URI* @returns {Promise<object>} 访问令牌响应*/try {}),

Mageia的专栏 3199

Feign返回值统一处理

这种写法优点就是一次性反序列化到位,后续使用根据泛型里面的类型直接使用,如果不进行泛型合并,只转成类型,如果data的类型是有很多泛型嵌套的,那么可能反序列化类型是有问题的,比如data的类型是List,那么不指定详细的泛型类型,直接转成类型,那么data字段序列化结果会是List

BASK2311的博客 4222

C++中const和指针*的组合问题

今天在复习> 章节7.3的时候想到以前做的一个题,const和指针运算符*的若干种组合的合法性和意义问题,有点混淆,所以写了一个测试代码来验证一下,简单明了,一目了然。如果有什么遗漏的话欢迎指出。 首先是在Ubuntu14.04.1下用gcc 4.8.4编译运行的结果,编译器报错信息都附加在对应语句后面的注释里 /* * Note : Test for the combinations of

theColdOne的专栏 1082

Oracle数据库RMAN异机恢复保姆级教程,按照步骤来操作,一次就成功!

本文深入解析RMAN异机恢复四大核心场景(演练、数据恢复、故障应急、测试环境搭建),提供从备份到验证的完整步骤和实战脚本。包含RAC到单机迁移技巧、路径调整、常见报错解决方案,助你彻底掌握数据库恢复的“救命技能”。DBA必备干货,强烈推荐

Jackyimi的博客 940

openfeign调用获取response、body/header

1、feign客户端调用 注意点,feign中header可以放在@RequestMapping中进行处理 @FeignClient( contextId = "loginInter",value = SystemServiceName.AUTH_SERVICE_USERCENTER_SAAS) public interface LoginInter { //通过拿着cas获取的tickt获取用户信息 @RequestMapping(value = "/api/u...

my_interface的博客 1万+

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)

本文提供了一份详细的Simulink仿真指南,手把手教你从零开始搭建交流异步电机矢量控制模型。内容涵盖主电路搭建、坐标变换实现、双闭环PI调节器设计、转子磁链观测器调试等核心步骤,并附有完整的仿真文件,帮助读者跨越理论到实践的鸿沟,掌握高性能电机控制系统的建模与仿真技能。

pz890123的博客 670

微服务之间使用feign无法传递HttpServletResponse的问题

当使用feign远程调用服务提供方的方法,而方法中带有HttpServletResponse参数时,会报错java.lang.IllegalStateException: getOutputStream() has already been called for this response

xiaozhiming的博客 5094

SECS/GEM协议中的关键指令详解:从S1F1到S9F9的完整指南

本文详细解析了SECS/GEM协议中从S1F1到S9F9的关键指令,涵盖设备状态管理、控制诊断、报警处理等核心功能。通过实际案例和调试技巧,帮助开发者掌握半导体制造设备通信标准,解决SECS/GEM协议在实际工程应用中的通讯难题,提升生产线智能化水平。

weixin_26899659的博客 397

VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能

VTK (Visualization Toolkit) 是一个强大的开源可视化库,非常适合处理点云数据。下面将介绍如何使用 VTK 显示大量点云数据,并实现点云拾取、着色、测量等功能。

深之JohnChen的专栏 1996

不同服务之间通过feign实现Response传递

feign.Response 不同服务之间通过feign实现Response传递

m0_47520320的博客 1390

手把手教你学Simulink——基于Simulink的前馈解耦SVPWM整流器仿真

本文详细介绍了基于Simulink的前馈解耦SVPWM整流器仿真方法。针对三相PWM整流器存在的dq轴交叉耦合问题,提出前馈解耦控制方案,通过在电流环中引入耦合电压补偿项,显著提升系统性能。文章包含完整的系统架构、核心算法、Simulink建模步骤及参数设置,仿真结果显示:电流跟踪误差<2%、动态响应时间<0.05s、THD<3%、功率因数>0.999。同时提供了可直接复用的MATLAB代码和工程优化建议,为电力电子工程师实现高精度AC/DC转换提供了实用解决方案。

MHD0815的博客 108

HttpServletResponse接口详解

在 Servlet API 中,定义了一个 HttpServletResponse 接口,它继承自 ServletResponse 接口。HttpServletResponse 对象专门用来封装 HTTP 响应消息,简称 response 对象。在 Servlet API 中,定义了一个 HttpServletResponse 接口,它继承自 ServletResponse 接口。HttpServletResponse 对象专门用来封装 HTTP 响应消息,简称 response 对象。 ...

qq_45793102的博客 1483

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

feign Response只能读一次问题 和 feign response 返回值拦截

前言 spring cloud 对feign调用对返回值做了包装处理,通过一些列Decoder来处理feign访问的返回值。 具体流程 从SynchronousMethodHandler中的decoder开始会经历如下几个decoder: OptionalDecoder -> ResponseEntityDecoder -> SpringDecoder 可以在 FeignClientsConfiguration 看到有对上面三个decoder的定义,有兴趣的可以自行阅读源码。 feign返回值

社区之星的专栏 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

记使用feign 远程调用下载图片接口

记使用feign 远程调用下载图片接口

大哥的阔落 831

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Fegin调用之间传递Response流的弊端

一次项目中调用API的时候没有留意,没有发现API返回的是Response流,作为中间API接口封装的服务,直接将外部返回回来的流传递给了消费者服务,导致出了问题. 后来在网上找到了原因:feign Response只能读一次问题 和 feign response 返回值拦截_社区之星的专栏-优快云博客_feign response 所以我在我的代码里进行了一层封装Demo如下: public void getMedia(String corpId,

qq_40708942的博客 3166

文件压缩下载,Feign文件流传递

文件下载,压缩,解压

GM_115的博客 4555

【Java】Feign调用外部项目,目标调用方法的入参为HttpServletRequest 、HttpServletResponse时的处理

Feign调用外部接口,被调用方法的入参为HttpServletRequest、HttpServletResponse时如果处理入参?不明确被调方法的返回数据结构时怎么处理?

weixin_42369773的博客 2902

Feign的使用以及调用过程分析

Feign的使用以及调用过程分析 在进行微服务之间的调用的时候,我们本质上都是通过http请求来进行的(参数处理,返回结果处理),在使用Feign之前我们都是使用的RestTemplate来完成这些工作的,类似于下面的这种方式: UserInfo userInfo = this.restTemplate.getForObject("http://user-client/userInfo/getUser/{name}", UserInfo.class, name); 这仅仅只是一次接口的调用,往往微服务之

qq_38238296的博客 6618

【服务通过Feign调用文件下载接口获取响应数据,返回类型为void,入参只有HttpServletResponse】

对应服务之间的调用若不是通过客户端发送的请求,服务之间是HttpServletResponse和HttpServletRequest的入参,可以不传,对应用response响应进行流输出的接口,在进行feign调用时可以将返回类型写成ResponseEntity<byte[]>或者Response进行byte字节接收。做项目以来一直是调用对应调用外部其他服务的文件接口,现在要进行服务内部调用其他服务的,遇到这种情况还真没有处理过这种情况。

xiaobaixuedaima的博客 1217

Feign遇到的坑:调用生产方获取响应流。

遇到个小坑,记录下​。 ​ 在SpringBoot微服务架构中,通常都是使用eureka作为注册中心管理服务,使用feign来相互调用各个服务进行服务间的沟通。 一般情况下去调用生产方的请求都是有返回值的,使用feign调用在消费方拿到生产方的返回值后去做处理,意思就是说生产方服务的请求是什么类型的返回值那么使用feign调用的时候就要接收什么类型的返回值: 例如: A服务生产方: Feign调用: B服务消费方: 以上可以看出当使用feign去调用生产方的请求时 参数和返回值必须保持一直才可以正常

qq_44322555的博客 1万+

微服务通过feign.RequestInterceptor传递参数

Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参数 template ,该参数类型为 RequestTemplate,我们可以根据实际情况对请求信息进行调整,示例如下: 创建自定义请求拦截器,在发送请求前增加了一个请求头信息,进行身份校验。 i...

点缀星空 3803

Feign接口获取文件流问题

文件下载 @GetMapping(value = "/v1/files/**/{file_name:.+}") public void downFile(@PathVariable("file_name") String fileName, HttpServletResponse response, HttpServletRequest request) { // Str...

wyazyf 1万+

Feign远程调用接收文件流

feignClient接口方法接收Response @FeignClient(value = "service-file") public interface FileDataService { /** * 根据key获取文件输入流 * @param fileUuid * @return * 这里Response 依赖feign的 import feign.Response; */ @RequestMapping(value = "/innerApi/g

JAVA学习笔记 8129

feign的加解密封装

feign Encoder Decoder实现加解密、feign加解密、feignClient加密、feign response 解密

灼烧的疯狂 4182
上一篇: MySql判断表是否被锁定、如何解锁
下一篇: 百度文字识别OCR
Adda_Chen
博客等级 码龄7年 1214粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值