服务之间远程Feign调用,出现参数丢失

最近有同事反映生产上,服务与服务之间远程调用,偶尔会出现 参数丢失的情况。但是,不是所有服务之间都会出现参数丢失,是固定有2个服务之间有这种情况。之前也发现过有这种情况出现,还以为是真的没传参数,这一次大家合力一起研究了下,发现是偶发情况。

打断点,压力测,网上寻求答案。终于找到了问题所在,先贴个大佬的解释 偶现的MissingServletRequestParameterException,谁动了我的参数?,解析得很详细。一查发现,果然,这两个出现参数丢失的服务里,有在异步方法中传递使用 HttpServletRequest 的情况。

总结下:

在Tomcat中,Request以及Response对象是会被 循环使用 的。如果在 异步 方法里(比如使用 @Async 等)使用 HtttpServletRequest 对象,有可能会导致请求参数不被解析,从而报错 org.springframework.web.bind.MissingServletRequestParameterException: Required long parameter 'xxx' is not present

所以,我们切记在异步方法中 不要传递使用 HttpServletRequest。

与其花许多时间和精力去凿许多浅井,不如花同样的时间和精力去凿一口深井。-- 烟沙九洲

相关推荐
肥仔哥哥19309 分钟前
基于OpenCv做照片分析(Java)
java·人工智能·opencv·图像原理
一枚小小程序员哈11 分钟前
基于Android的车位预售预租APP/基于Android的车位租赁系统APP/基于Android的车位管理系统APP
android·spring boot·后端·struts·spring·java-ee·maven
没有bug.的程序员13 分钟前
JVM 学习与提升路线总结:从入门到精通的系统化指南
java·jvm·学习·提升
用户307429716715816 分钟前
Spring AI实战:基于ElevenLabs 实现文本转语音的实时音频流
java·spring boot·ai编程
二闹22 分钟前
从@Transactional失效场景到传播行为原理
java·后端
赵星星52025 分钟前
synchronized锁的是谁,看完这篇就明白了
java·后端
小张学习之旅27 分钟前
线程池简单讲解
java·后端
叫我阿柒啊40 分钟前
Java全栈开发面试实战:从基础到微服务的深度解析
java·jvm·微服务·vue3·springboot·全栈开发·restfulapi
cxyxiaokui0011 小时前
检索增强生成(RAG):打破模型知识壁垒的革命性架构
java·aigc
Monly211 小时前
Docker:部署Java后端
java·docker·容器