记一次解决 Feign 提交批量添加请求收到 400 报错的经历

HttpURLConnection解决Feign报400问题 问题描述 项目中使用Feign组件远程调用问题记录,本地代码执行正常,部署到服务器访问调用不了远程接口,报 feign.FeignException: status 400 reading,不太清楚是什么问题,分别用了httpclinet、resttemplate、feign,结果都失败报同一个问题,明明本地运行正常,线上就不正常了呢? 原因分析: 网上查了很多报错的原因,但是都不符合,最后用了HttpURLConnection这个api 成功解决 解决方案: //post请求 public 阅读详情

 上周在实现用 OpenFeign 提交批量添加请求时,遇到一个奇怪的问题,本来 Post 请求的 body 体,因为是批量请求,内容就比较多,准备起来就比较麻烦,仔细检查了很多次,提交时还是各种失败,最终终于按照官方文档在 Postman 中提交成功了,本以为万事大吉了,于是开始写 Java 代码, 没想到用 Java 代码用几乎一样的 body 体提交,居然总是失败,收到一个 400 的报错,反复查看那个报错,也看不出什么有用的信息,在网上搜索答案也没有什么提示,甚至考虑是不是 feign 的 client 有什么问题? 中间还尝试了用 ApacheHttpClient 替换默认的 DefaultHttpClient 等,都是一样的问题,卡住了一整天……

第二天恢复精力后,中间有空的时候,考虑是不是自己手拼的 body 体不标准,不确定哪里是不是有什么遗漏, 因为之前就因为少个换行啊什么的出现过一些提交报错,所以专门为此写了生成 body 体的 Java 类,用 TDD 的方式,一点点组装出 Get 的 body 体,想着先从批量 Get 请求开始,稳扎稳打地实现代码。

当天下午,把 Get 请求的 body 体拼接好,执行后居然成功了,非常高兴,以为是之前太粗心,心想还是要稳稳地用单元测试来保证代码的准确啊!

于是继续完成 Post 的 body 体的拼接,以为这样就应该没问题了,没想到,同样的错误又出现了,批量 Get 请求可以,而 Post 请求就失败。 但是为什么 Postman 可以呢? 仔细比对 Postman 和 Java 中的两个 body 体,也实在看不出有啥不同,甚至用 Java 中的 body 体放到 Postman 中提交也是可以成功的。又陷入了僵局,百思不得其解,只好先忙其他的工作。

因为这个工作有一定的时间限制,原来的代码是在 for 循环中一条一条地提交插入数据, 考虑未来运行期的性能问题,想要用批量插入来实现,这样一次提交就可以完成原来要十几个请求才能完成的插入数据功能。可是现在遇到这样的问题,几乎想要放弃了,暂时先用原来的 for 循环解决业务需求。

然后回头想了一下,既然 Postman 都提交成功了,那感觉胜利就近在眼前了,实在是不想放弃。

于是周六休息,放空了一下大脑,没有再想这个事,今天周日中午睡了一觉,看了会儿书后,重振旗鼓,再来尝试解决这个问题。

因为有之前打下的坚实基础, TDD 驱动出来的代码,过程中也重构得很整洁,再次开始,只需要执行之前写好的单元测试,就可以重现问题了,这次使用 debug 一点点深入到 feign 的源码内部,感谢 IDEA Intellij 的强大功能, 一层层进入到 RequestTemplate.java 这个文件, 发现 header 里面多了一项: Content-Length,因为我在提交的请求头中并没有加这一项,因此这个 header 引起了我的注意。

反复调试了几次,发现这个 header 是在 feign 解析请求模板时拼接进来的,当时看到的数字是 729,看到代码里有一些转编码的操作,怀疑是不是编码问题算错了长度?于是把请求的 body 在 Java 里写了一个临时的单元测试,验证了一下长度,果然也是 729 的长度, 把同样的 body 放在 Postman 中提交是可以成功的,但是加上 Content-Length:729 后,就失败了,跟 Java 里遇到的问题一模一样, 哈哈…… 虽然失败了,但很高兴,毕竟是在 Postman 中重现了问题。这样我就在想,是不是这个 multipart/mixed 的 POST 请求不能添加 Content-Length 这个 Header? 目前在 Postman 上测试的情况就是不加这个 header 就可以提交成功,但加上后不管输入什么数字就都是失败。

于是,想了一下似乎没什么办法绕过 feign 的功能,翻了下 OpenFeign feign-core 的源代码,就是在 RequestTemplate.java 这个文件中看到自动添加 Content-Length 这一项的代码,在 feign 的 Github Issue 中也没找到类似的问题,考虑是不是给 feign 开源社区提个 Issue ?于是发了这个 Issue 1810, 然后又想,既然已经找到具体的代码了,为什么不帮忙修改一下提一个 pull request 呢? 于是 Fork 了代码,下来后看到人家的代码也是有配套的单元测试的,很容易测试,不一会儿就把代码修改并测试通过了,提交了 pull request 1811,蛮有成就感地去吃晚饭了。

吃完饭,又在想等人家审核代码、合并发布也要等不知道多少天,我能不能有个临时的解决方案先绕过它呢?是不是我传个什么特殊的值, feign 就不会再加这个 header 了呢? 一些想法都需要验证,好在用 Postman 来推敲问题就相对快捷了, 填 0 ,就直接返回了一个 --batch_xxxx--, 数据库也没有插入任何数据,似乎是直接结束了请求, 填 null 直接报错,非法的值, 填一个很大的数字 1000,就是一直在发送,点取消才能停止,按字符串长度 729 提交,就跟之前的报错一样,然后一点点添加长度,730 往上升,780 往下降,最后在 750 的时候, 提交成功了!

这说明什么? 说明不是不能加 Content-Length 这个值,而是一个特定的值就能成功,可是明明字符串长度是 729,为什么会在 750 时提交成功呢? 再次 debug 到 RequestTemplate.java 中,仔细查看了计算长度的代码,甚至将相同的代码摘出来,单独测试了一下,源代码中虽然是计算的 byte 的长度,但是使用 UTF-8 的编码得到的长度也是 729,难道说 Postman 计算长度时加了别的什么东西?729 和 750 相差了 21,其他 header 似乎也没有什么内容恰好是 21 个字符的, 正在没什么头绪的时候,突然注意到 body 的内容正好是 22 行,很接近 21 这个数字,突然想到,是不是换行符的问题? 22 行内容正好是 21 个换行符。

没错,肯定是这个问题!

于是换了一下换行符,好在之前的代码很整洁,还专门抽了一个常量: String EOL = "\n"; ,所以很简单,改成 "\r\n" 就成了,一试,果然通了!

高兴之余,想到之前提的 pull request 不是错了,赶紧上去关闭了 Issue 和 Pull request。 然后回到项目上的代码,把自己之前写的单元测试改好,测试全通过,代码整理了一下,提交了代码。

回想了一下这个过程,其实好多次都已经接近真相了,可就是没有触及答案,就好像在黑暗中摸索,几次手已经划过了电灯开关附近,但偏偏就是没摸到开关。反思了一下,一方面是自己的经验不足,对 feign 还比较陌生,另一方面,对于 HTTP 请求的细节根本没有深入研究过,对于 multipart/mixed 的请求也是头一次接触,否则可能早就找到问题原因解决了。 好在这样的一次经历最后有了一个圆满的结局,同时也学到了一些新知识。

feign.FeignException: status 400 Required request part ‘file‘ is not present问题解决 使用feign远程调用上传文件接口踩坑记录: 需要增加依赖: <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.3.0</version> </dependency> <dependency> <gro 阅读详情

相关推荐

Spring Cloud微服务避坑指南:RuoYi中OpenFeign的5个常见错误及解决方案

本文针对在RuoYi-Cloud微服务框架中使用OpenFeign时常见的五大陷阱,提供了详细的解决方案。重点剖析了契约不匹配、泛型反序列化、服务发现、熔断降级配置以及超时重试策略中的常见错误,帮助开发者有效规避问题,提升微服务间通信的稳定性和开发效率。

weixin_29296241的博客 231

SpringCloud之Feign调用 400 错误 之 巨坑

SpringCloud内置feign 400错误详解

qq_40426135的博客 5581

ChatGPT API生产级调用:Token计算、限流重试与成本管控

ChatGPT API本质上是基于HTTP协议的远程AI服务接口,其核心原理依赖于OpenAI后端GPU集群的推理调度与BPE分词器的token化处理。技术价值体现在低门槛接入大模型能力,但真实约束来自网络延迟、配额限流(requests_per_minute/tokens_per_minute)和按token计费模型。典型应用场景包括智能客服、文档摘要与教育问答系统,其中token预估、指数退避重试和对话压缩是保障稳定性的关键实践。本文聚焦ChatGPT API调用中的token计算与429错误处理,提供

weixin_33910759的博客 383

feign Post请求报错400 排查思路及解决过程分享

错误信息展示: 这是kibana上的日志输出,报错400 bad request! 背景 feign版本3.0.0 分布式项目 测试环境运行 服务内部通过POST请求进行交互报错400 断言 初步断言可能存在的情况: 1、调用者与被调用者的feign请求方式不统一 2、调用者与被调用者的参数不匹配 解决过程 根据断言排查 根据断言排查发现,全部无误: 调用者使用POST方式请求,被调用者使用POST方式提供接口 入参类型及名称均一致 被调用者使用@RequestParam(“xxx”)的方式接收多个参数

泯灭于众生,高歌于孤夜! 1万+

【信息科学与工程学】计算机科学与自动化——第一百三十五篇 开发框架篇 系列二 Spring框架系列 02 Spring Cloud01

定义 HealthScore=∑wi​⋅indicatori​,其中 indicatori​ 为各组件健康度(0~1),wi​ 为权重。当 HealthScore<threshold 时返回 DOWN。②。

weixin_49199313的博客 481

事件触发机制下孤岛微电网二次电压频率协同控制仿真

微电网孤岛运行时失去大电网支撑,电压与频率稳定是分布式电源协同控制的核心挑战,也是微电网工程落地的关键问题。传统二次控制依赖周期通信,在带宽有限、信道拥堵的现场场景中易造成资源浪费。事件触发控制作为一种按需通信机制,仅在状态偏差显著时触发数据传输,可在保持系统稳定性的前提下大幅降低通信频次。本文围绕一次下垂控制与事件触发二次协同控制的设计逻辑,结合Simulink仿真验证,分析频率电压恢复能力、触发参数整定及与周期触发的性能对比,为通信受限环境下的微电网分布式控制提供可行的工程路径。

weixin_33766168的博客 434

关于Feign报错:feign.FeignException: status 400 reading

feign.FeignException: status 400 reading 一、问题 feign请求接口报400 二、解决方法 因为前面接口调用的时候是好的,后面增加了很多参数传递,然后就报了400;经过排查字段的正确性和网上找了一些方式尝试,发现当传递的数据少时接口正常,所以应该是 springboot 内置 tomcat 的 http 请求头参数被限制的大小问题。 默认是8k: 修改此参数的大小即可: ...

慌途L 1万+

BUUCTF reverse题解汇总

BUUCTF平台刷题过程中做的一些逆向题解的总结归类

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 1万+

Feign调用报错feign.FeignException: status 400 reading xxx 异常

微服务调用时报错“status 400 reading x x x” 经过查看日志,各种排查问题,最后发现路径配错了。 好尴尬

善守者 2494

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 150

Conformal LEC逻辑等价性检查介绍和参考脚本

分为三个产品:Conformal L、Conformal XL、Conformal GXL。L是功能性检查,XL支持复杂数据通路的综合和APR优化,GXL支持定制的stdcell和定制memory的检查。Cadence Conformal Equivalence Checker,就是常说的LEC,可以用来验证RTL、门级网表、甚至spice网表的逻辑等价性。do文件是conformal的脚本文件,可以由综合工具(RTL Compiler/Genus)自己产生(write_do_lec),也可以手写。

NanDigits的博客 7249

SpringCloud 2023下Feign突然报400错误?一个意想不到的腾讯IM初始化问题排查实录

本文记录了SpringCloud 2023环境下Feign突然报400错误的排查过程,揭示了腾讯IM SDK初始化时全局拦截器污染Feign请求的隐藏问题。通过分析异常特征和链路追踪,最终定位到SDK自动添加的Header导致请求失败,并提供了三种解决方案及防御性编程建议,帮助开发者避免类似陷阱。

weixin_30772105的博客 88

如何在OBS中添加实时时间戳:Lua脚本配置教程(附效果展示)

本文详细介绍了如何在OBS中通过Lua脚本配置实时时间戳功能,包括环境准备、脚本获取、安装配置及高级定制。适用于直播和视频录制场景,提供精准回溯和风格自定义,支持多平台适配和性能优化,是专业制作的必备技巧。

day7的博客 1044

tomcat报错 error parsing HTTP request header Note: further occurrences of HTTP header parsing errors

我当时是标签向后台传参数是,因为参数是中午一直报400错误,http传输参数时乱码,用了好多方法没啥用,包括改tomcat中的server.xml文件改成。 还是不行,后来我换成火狐的浏览器可以了,IE的不行,传的参数乱码,并且报400错误,换成火狐浏览器,解决问题。...

qq_39533140的博客 7123

5分钟搞定:用Pyannote和Whisper实现带说话人分离的语音转文字(附完整代码)

本文详细介绍了如何快速构建一个集成了说话人分离功能的语音转文字系统。通过结合OpenAI的Whisper模型进行高精度语音识别和Pyannote模型实现说话人分离,并提供了完整的代码实现、环境搭建指南以及核心的对齐与合并逻辑,帮助开发者高效处理会议录音、访谈等多说话人音频,实现自动化转录。

threejs5artist的博客 635

动态掩码语言模型(MLM)优化策略:效率提升与最新技术实践

本文深入探讨了动态掩码语言模型(MLM)的优化策略与技术实践,涵盖核心原理、效率优化及2025年最新突破。重点解析了动态掩码在提升模型性能中的关键作用,包括工程实现、掩码策略演进及混合专家动态掩码等创新技术,为自然语言处理领域的研究与应用提供实用指南。

vscode5coder的博客 217

Spring Cloud & SpringCloud Alibaba(一套标准化的微服务解决方案)

本文介绍了Spring Cloud微服务架构的基本概念、系统架构演变过程以及核心组件。主要内容包括:Spring Cloud作为微服务落地方案的优势,支持分布式系统开发,提供服务发现、负载均衡等功能;Spring Cloud Alibaba作为补充方案,具备高性能、高可用特性;微服务基础环境搭建步骤,创建父工程聚合管理多个微服务模块。文章通过架构图对比了单体架构、动静分离架构、分布式架构和微服务架构的差异,并提供了Spring Cloud与Spring Boot版本对应关系参考。

m0_48853274的博客 844

基于分位数回归的静态CoVaR计算 案例与代码

原文链接:https://bbs.pinggu.org/thread-7925441-1-1.html 一、静态CoVaR模型介绍 二、资料简介 实现对相关期刊论文进行论文重现,解决实证分析中的技术操作问题。里面包含了每一步详细的步骤,可以方便的利用这个手册解决大部分利用分位数回归计算静态CoVaR的论文的模型实现问题。即从数据下载到模型实现一整条操作步骤。 关键词:【分位数回归】【Co...

ChenQihome9的博客 7504

软考架构师论文实战:从微服务拆分到治理的高分写作心法

微服务架构作为应对复杂业务系统的主流解决方案,其核心在于通过服务拆分实现解耦与独立部署。其原理是将单体应用按业务边界分解为多个小型自治服务,每个服务围绕特定业务能力构建,并通过轻量级通信机制协作。这一架构模式的技术价值在于提升系统弹性、加速团队交付效率,并能支持技术栈的异构性。在应用场景上,微服务尤其适合业务逻辑复杂、团队规模较大且需要快速迭代的互联网应用。本文聚焦于软考系统架构设计师论文写作,深入探讨如何将微服务架构的实战经验,特别是服务拆分策略、稳定性保障与可观测性建设等关键环节,转化为逻辑严密、体现深

weixin_30564785的博客 633

复现:Mamba-UNet:降水临近预报的创新解决方案

Mamba-UNet通过其创新的双分支Mamba融合模块、多尺度时空注意力模块和动态分位数加权损失函数,在降水临近预报领域取得了显著的性能提升。它不仅在多种降水场景下表现出色,尤其在预测强降水事件方面展现出了强大的能力。这一创新模型为降水临近预报提供了一种新的解决方案,有望在未来的研究和应用中发挥更大的作用,为应对气候变化带来的挑战提供有力支持。随着技术的不断发展和优化,我们期待Mamba-UNet在更广泛的气象预报任务中发挥更大的价值,为各行各业提供更精准、更可靠的降水预报服务。

hanfeng5268的博客 913

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

微服务稳定性守护神:Sentinel流量控制与熔断降级实战指南

在分布式系统与微服务架构中,流量控制和熔断降级是保障服务高可用的核心技术。其核心原理是通过预设规则对服务调用进行实时监控与干预,当检测到流量洪峰或依赖服务异常时,系统能自动采取限流、熔断或降级等防护措施,防止局部故障扩散引发系统雪崩。这项技术的核心价值在于,它能将稳定性保障从“被动应对故障”转变为“主动预防风险”,是构建弹性系统的基石。其典型应用场景包括电商大促应对瞬时高峰、金融交易确保核心链路、以及任何存在服务间调用的分布式环境。本文将以阿里巴巴开源的轻量级组件Sentinel为例,深入解析其如何通过**

weixin_30279671的博客 358

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

机器学习模型上线:从Jupyter到生产系统的工程化跃迁

机器学习模型部署不是训练完成后的简单封装,而是将算法深度嵌入真实业务系统的关键工程实践。其核心在于理解模型在生产环境中的行为逻辑——包括特征服务可靠性、上下游系统耦合、延迟与容错的确定性保障,以及数据漂移与决策异常的主动感知机制。尤其在金融、支付等强SLA场景中,模型必须与Kafka、Redis、Oracle及人工审核流协同呼吸,任何环节的微小偏差都可能引发连锁故障。因此,真正的MLOps能力,体现在对‘失败剧本’的预设能力、对‘数据衰老’的预警能力,以及对‘合规可审计’的闭环治理能力。

weixin_30562507的博客 411

jre9下载 jdk9

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring Boot 3.3 配置简化与启动性能优化实战

Spring Boot 是基于 Spring 框架的快速开发脚手架,其核心价值在于自动配置、起步依赖和生产就绪特性。随着微服务规模扩大,传统配置方式导致重复冗余、环境耦合与启动缓慢等典型问题。Spring Boot 3.3 通过配置分组(group)、类加载优化、Bean 定义压缩及 JVM 自动调优等机制,在不改变架构前提下显著降低认知负荷与运行开销。该版本尤其强化了对 AI 集成与原生镜像的支持,使开发者能更聚焦业务逻辑而非胶水代码。本文围绕配置简化与启动性能两大高频痛点,结合真实生产数据与可落地的升级

weixin_34038293的博客 881

机器学习模型上线:从Jupyter到生产环境的工程化落地

机器学习模型部署不是简单的API封装,而是将算法嵌入复杂企业系统的关键工程实践。其核心在于理解模型在真实基础设施中的行为逻辑——包括特征服务可靠性、上下游系统耦合、延迟敏感性与业务成本映射、数据漂移的实时感知,以及可审计的决策溯源。尤其在金融、支付等强监管场景中,‘模型可用’远不如‘决策可控’重要,必须通过熔断机制、降级策略、灰度染色、业务层监控等手段构建韧性。本文聚焦ML系统上线后72小时内的关键挑战,结合风控、核保、推荐等典型场景,详解如何用工程思维替代实验室思维,实现从‘能跑’到‘稳跑’的跨越。

aome1470的博客 403

OpenFeign 接口调用出现400错误

Feign接口调用出现400错误可能有很多种情况,我就来讲一下我的碰到400错误。 400报错原因: Feign消费者调用被消费者接口时传入参数为null,导致400错误。 报错未处理之前: //Feign消费者 @RequestMapping("/test") public void test(String testStr){ } 报错处理之后: //Feign消费者 @Requ...

旭东怪的博客 9416

解决feign调用服务接口400错误

今天解决了一个困扰我几天的使用@FeignClient注解调用本地其他服务,这些服务都在远端的zookeeper里面注册,检查过名称路径都没问题,但是接口返回的400。然后我就在我本地下载了个zookeeper,将项目注册到本地中,还是返回400,先排除zookeeper的问题。然server.max-http-header-size变量已经被弃用,需要设置HTTP请求头最大尺寸。其实根本原因还是因为post请求参数过多导致的参数没有传输完整。有任何错误欢迎大家来指正!

2301_76780241的博客 1630
上一篇: 遗留项目迁移的经验、策略和能力 Legacy System Renew
下一篇: 大乔,王者荣耀真正的王者
世风十三
博客等级 码龄22年 18粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值