当前位置: 首页 > news >正文

关于openfeign调用时content-type的问题

问题1描述:

今天在A服务使用openfeign调用B服务的时候,发现经常会偶发性报错。错误如下:在这里插入图片描述
情况为偶发,很让人头疼。
两个接口如下:
A服务接口:
在这里插入图片描述
delayReasonApi.test(student);就是使用openfeign调用B服务的接口。
B服务接口:
在这里插入图片描述

原因分析:

因为A服务的接口是一个文件上传的接口,所以前端请求头中使用的是multipart/form-data 来请求的该接口。而B服务的接口是一个用json接口参数的接口,所以需要请求头中的Content-Type为application/json。

如果在上面都没有配置过的情况下,在B服务的接口参数使用@RequestBody注解来接受的时候,openfeign是会默认使用application/json 的content-type来进行请求的。代码如下:
在这里插入图片描述
但是一般我们都会在项目中加上openfeign的配置文件,将目前的所有的header中的参数全部写入openfeign的请求中,如下:

@Component
public class FeignConfiguration implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if (attributes != null) {HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();Enumeration<String> headerNames = request.getHeaderNames();if (headerNames != null) {while (headerNames.hasMoreElements()) {String name = headerNames.nextElement();String values = request.getHeader(name);template.header(name, values);}}}}
}

这样就导致,我A服务接口使用的是multipart/form-data,而B服务接口需要的是application/json,而我的配置类会把A接口的multipart/form-data写到请求头中,这样就会导致openfeign在请求的时候会有两个content-Type,而且这两个值的顺序是不一定的,有的时候application/json在前面,有的时候multipart/form-data在前面:

在这里插入图片描述
在这里插入图片描述
我估计B服务在拿的时候只那集合中的第一个,但是我没找源码嘿嘿。当multipart/form-data在前面的时候,就会报上面的错误。

所以这个时候就有一个解决办法:

把我们的配置类中的代码进行修改,跳过content-type的赋值。
在这里插入图片描述
如此,openfeign就只会用默认的application/json进行请求了。

问题2描述:

延续上面的问题,当我修改了配置类之后,发现还是会有这样的情况,后来发现是我们的微服务的项目中有两个服务都写了openfeign的配置类,而这两个配置类都被引用在了A服务中。openfeign在调用接口的时候会先迭代所有的配置类,导致前面的情况又重演了一遍。
在这里插入图片描述

解决方法:

删掉一个配置类。

问题3:

继续上面的情况,如果B服务的接口也是个文件上传接口,那么这个时候也是需要使用multipart/form-data的,那这个时候需要怎么做呢?openfeign是否会默认使用multipart/form-data呢?
B接口如下:
在这里插入图片描述

测试结果:

content-type为空,并且会报错
在这里插入图片描述
在这里插入图片描述

解决办法:

在B接口上加上 consumes = “multipart/form-data”
在这里插入图片描述
此时content-type就有值了。
在这里插入图片描述

end!!!

相关文章:

关于openfeign调用时content-type的问题

问题1描述&#xff1a; 今天在A服务使用openfeign调用B服务的时候&#xff0c;发现经常会偶发性报错。错误如下&#xff1a; 情况为偶发&#xff0c;很让人头疼。 两个接口如下&#xff1a; A服务接口&#xff1a; delayReasonApi.test(student);就是使用openfeign调用B服务的…...

OpenCV 玩转图像和视频

为什么学OpenCV&#xff1f; • OpenCV ⽀持对图像缩放、旋转、绘制⽂字图形等基础操作 • OpenCV 库包含了很多计算机视觉领域常⻅算法&#xff1a;⽬标检测、⽬标跟踪等 OpenCV 简介 • OpenCV (Open Source Computer Vision) 是计算机视觉和机器学习软件库 • Intel 1999…...

技术分享 | 如何编写同时兼容 Vue2 和 Vue3 的代码?

LigaAI 的评论编辑器、附件展示以及富文本编辑器都支持在 Vue2&#xff08;Web&#xff09;与 Vue3&#xff08;VSCode、lDEA&#xff09;中使用。这样不仅可以在不同 Vue 版本的工程中间共享代码&#xff0c;还能为后续升级 Vue3 减少一定阻碍。 那么&#xff0c;同时兼容 Vue…...

基于ArcGis提取道路中心线

基于ArcGis提取道路中心线 文章目录 基于ArcGis提取道路中心线前言一、生成缓冲区二、导出栅格数据三、导入栅格数据四、新建中心线要素五、生成中心线总结 前言 最近遇到一个问题&#xff0c;根据道路SHP数据生成模型的时候由于下载的道路数据杂项数据很多&#xff0c;所以导…...

xcode14.3更新一系列问题

1. Missing file libarclite_iphoneos.a (Xcode 14.3) 解决方法 Xcode升级到14.3后编译失败&#xff0c;完整错误日志&#xff1a; File not found: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneo…...

1U和2U的服务器怎么选择

企业建设网站的过程中&#xff0c;离不开租用服务器的环节&#xff0c;服务器在多种场景里面都可以发挥作用&#xff0c;服务器租用渠道有哪些&#xff1f;1U、2U选哪种服务器比较好&#xff1f;大家跟着壹基比小鑫一起来了解具体内容吧&#xff01; 1U、2U选哪种服务器比较好&…...

【SA8295P 源码分析】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码)

【SA8295P 源码分析】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码) 一、APPS PBL(Application Primary Boot Loader):固化在CPU ROM中1.1 APPS PBL 加载 XBL Loader1.2 XBL Loader加载验证并运行SMSS进行自检,自检完成后触发Warm Reset1.3 WarmRest后,APPS…...

【数据结构与算法】迪杰斯特拉算法

迪杰斯特拉算法 介绍 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是典型最短路径算法&#xff0c;用于计算一个节点到其他节点的最短路径。它的主要特点是以中心向外层层扩展&#xff08;广度优先搜索思想&#xff09;&#xff0c;直到扩展到终点为止。 算法过程 设置…...

python爬虫-网页数据提取

import requests #headers 网页右键->Network->最下面的User-Agent复制。 headers {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"} #你想要的网址 url &q…...

ZigBee的Many-to-One和Source Routing

1. Many-to-One Routing Many-to-One Routing&#xff0c;是一种简单的路由机制&#xff0c;使得整个网络中的路由设备拥有回到中心节点的路由。 在这种机制下&#xff0c;中心节点周期性发送Many-to-One route discovery广播&#xff08;协议栈默认设置为60s&#xff0c;可以…...

七夕节 Chinese Valentine‘s Day 的由来

农历七月初七是七夕节。Qixi Festival falls on the seventh day of the seventh lunar month. 以前有一个牛郎&#xff0c;和他的哥哥和嫂子住在一起。他放的一头牛曾经是天庭的一个神仙&#xff0c;但他违反天庭的戒律&#xff0c;变成牛放到了人间。As the story goes,once …...

掌握JDK21全新结构化并发编程,轻松提升开发效率!

1 概要 通过引入结构化并发编程的API&#xff0c;简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元&#xff0c;从而简化错误处理和取消操作&#xff0c;提高可靠性&#xff0c;并增强可观察性。这是一个预览版的API。 2 历史 结构化并发是由JEP 42…...

【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中

【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中 一、分区、下载、GPIO等杂项相关二、开机启动流程代码分析二、OpenWFD 显示屏模块三、Touch Panel 触摸屏模块四、QUPv3 及 QNX Host透传配置五、Camera 摄像头模块&#xff08;当前正在更新中...&#xff09;六、网络…...

TCP拥塞控制详解 | 6. 主动队列管理

网络传输问题本质上是对网络资源的共享和复用问题&#xff0c;因此拥塞控制是网络工程领域的核心问题之一&#xff0c;并且随着互联网和数据中心流量的爆炸式增长&#xff0c;相关算法和机制出现了很多创新&#xff0c;本系列是免费电子书《TCP Congestion Control: A Systems …...

前端学习清单

顺序不分先后。 技术名称技术描述技术链接HTML5HTML5是下一代的HTML标准&#xff0c;是一种用于结构化内容的标记语言。MDN|HTMLCSS3CSS3是CSS技术的升级版本&#xff0c;它的最大好处就是可以让网页设计师更加方便的为网页添加各种各样的样式&#xff0c;而不用再局限于文字、…...

go atomic原子操作详细解读

文章目录 概要1、基本知识1.1 原子操作是什么1.2 CPU怎么实现原子操作的&#xff1f; 2、atomic包2.1、 Add函数2.2、CompareAndSwap函数2.3、Swap函数2.4、Load函数2.5、Store函数 3、atomic.Value值 概要 atomic包是golang通过对底层系统支持的原子操作进行封装&#xff0c;…...

Vue用JSEncrypt对长文本json加密以及发现解密失败

哈喽 大家好啊&#xff0c;最近发现进行加密后 超长文本后端解密失败&#xff0c;经过看其他博主修改 JSEncrypt原生代码如下&#xff1a; // 分段加密&#xff0c;支持中文JSEncrypt.prototype.encryptUnicodeLong function (string) {var k this.getKey();//根据key所能编…...

Excel/PowerPoint折线图从Y轴开始(两侧不留空隙)

默认Excel/PowerPoint折线图是这个样子的&#xff1a; 左右两侧都留了大块空白&#xff0c;很难看 解决方案 点击横坐标&#xff0c;双击&#xff0c;然后按下图顺序点击 效果...

C++的类成员对齐

这是个小语法点&#xff0c;之前我们的对齐方式都是使用#pragma pack&#xff0c;这个方式实际是依赖编译器&#xff0c;且粒度粗(如果#pragma pack(1)之后没有#pragma pack(),那就作用整个进程了)。在C11之后引入关键字alignas&#xff0c;以此来实现对齐更加便利&#xff0c;…...

敏感挂载userhelper容器逃逸复现

目录 前言 分析 实验 前言 分析 实验 # Creates a payload cat "#!/bin/sh" > /evil-helper cat "ps > /output" >> /evil-helper chmod x /evil-helper # Finds path of OverlayFS mount for container # Unless the configuration ex…...

Android与SpringBoot的轻量级数据桥梁——OkHttp3实战解析

1. OkHttp3与SpringBoot的黄金组合 第一次用OkHttp3对接SpringBoot后端时&#xff0c;我盯着满屏的404错误差点崩溃。后来才发现&#xff0c;原来是因为手机和电脑不在同一个WiFi下。这种看似低级的错误&#xff0c;恰恰是新手最容易踩的坑。OkHttp3作为Android端最流行的网络请…...

破局RePKG使用困境:7个让效率倍增的创新工作流

破局RePKG使用困境&#xff1a;7个让效率倍增的创新工作流 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 认知重构&#xff1a;重新理解壁纸资源处理的本质 1.1 三维困境模型&…...

GPT-SoVITS实战体验:仅需1分钟音频,打造高保真个人语音库

GPT-SoVITS实战体验&#xff1a;仅需1分钟音频&#xff0c;打造高保真个人语音库 1. 引言&#xff1a;声音克隆技术的平民化革命 想象一下这样的场景&#xff1a;你录制了一段60秒的语音&#xff0c;几小时后就能听到AI用你的声音朗读任何文本——不仅音色相似度高达95%&…...

RVC模型效果深度评测:针对不同性别、年龄、语言的声音转换鲁棒性

RVC模型效果深度评测&#xff1a;针对不同性别、年龄、语言的声音转换鲁棒性 最近声音克隆和转换技术越来越火&#xff0c;特别是RVC模型&#xff0c;很多人都说它效果不错。但说实话&#xff0c;大部分评测都集中在“像不像原声”这个点上&#xff0c;对于更复杂、更实际的情…...

QwQ-32B在自然语言处理中的实战应用

QwQ-32B在自然语言处理中的实战应用 1. 引言&#xff1a;当NLP遇上推理专家 自然语言处理&#xff08;NLP&#xff09;领域最近迎来了一位强力选手——QwQ-32B。这不是普通的语言模型&#xff0c;而是一个专门为推理和思考设计的模型。想象一下&#xff0c;你有一个不仅能理解…...

Claude Code进阶实战:构建MCP驱动的多Agent协同开发流水线

1. 理解MCP驱动的多Agent协同开发 在传统软件开发中&#xff0c;一个工程师往往需要同时承担需求分析、UI设计、编码实现和测试验证等多个角色。这种"全栈式"工作模式虽然灵活&#xff0c;但随着项目复杂度提升&#xff0c;很容易出现专业深度不足、效率下降的问题。…...

Power BI数据导入总报错?别慌,这4个坑我帮你踩过了(附详细排查步骤)

Power BI数据导入报错全攻略&#xff1a;从错误代码到根治方案 每次看到Power BI弹出那个鲜红的报错窗口&#xff0c;我的第一反应总是想砸键盘——特别是在项目截止前一天晚上。但经过三年与各种奇葩报错的搏斗&#xff0c;我发现90%的数据导入问题其实都有迹可循。今天我们就…...

OpenClaw性能调优:GLM-4.7-Flash响应速度提升30%实战

OpenClaw性能调优&#xff1a;GLM-4.7-Flash响应速度提升30%实战 1. 为什么需要性能调优 上周我在本地部署了OpenClaw对接GLM-4.7-Flash模型&#xff0c;准备用它自动处理日常的邮件分类和会议纪要整理。但很快发现一个问题&#xff1a;每次任务响应时间都在8-12秒徘徊&#…...

六自由度机械臂逆解入门:当你的机械手‘知道’位置,如何反推关节角度?

六自由度机械臂逆解入门&#xff1a;从末端位姿反推关节角度的实战指南 当你第一次让机械臂抓取桌上的水杯时&#xff0c;可能会遇到一个令人困惑的问题&#xff1a;明明知道杯子在三维空间中的精确位置和朝向&#xff0c;却不知道该如何设置六个关节的旋转角度。这就是逆运动学…...

3分钟解决ROG笔记本色彩发白问题:G-Helper智能恢复指南

3分钟解决ROG笔记本色彩发白问题&#xff1a;G-Helper智能恢复指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…...