特色泡酒 發表於 2025-8-5 21:22:00

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

<p><span id="cke_bm_287S"></span>最近有同事反映生产上,服务与服务之间远程调用,偶尔会出现 <strong>参数丢失 </strong>的情况。但是,不是所有服务之间都会出现参数丢失,是固定有2个服务之间有这种情况。之前也发现过有这种情况出现,还以为是真的没传参数,这一次大家合力一起研究了下,发现是偶发情况。</p>
<p>打断点,压力测,网上寻求答案。终于找到了问题所在,先贴个大佬的解释 偶现的MissingServletRequestParameterException,谁动了我的参数?,解析得很详细。一查发现,果然,这两个出现参数丢失的服务里,有在异步方法中传递使用&nbsp;HttpServletRequest 的情况。</p>
<p><strong>总结下:</strong></p>
<p>在Tomcat中,Request以及Response对象是会被 <strong>循环使用</strong> 的。如果在 <strong>异步</strong> 方法里(比如使用 <strong>@Async</strong>等)使用&nbsp;HtttpServletRequest 对象,有可能会导致请求参数不被解析,从而报错&nbsp;<strong>org.springframework.web.bind.MissingServletRequestParameterException: Required long parameter 'xxx' is not present</strong>。</p>
<p>所以,我们切记在异步方法中&nbsp;<strong>不要传递使用</strong>&nbsp;HttpServletRequest。</p>
<p style="text-align: right"><span style="color: rgba(53, 152, 219, 1)">与其花许多时间和精力去凿许多浅井,不如花同样的时间和精力去凿一口深井。-- 烟沙九洲</span></p>
<p><span data-cke-copybin-end="1">​</span></p><br><br>
来源:https://www.cnblogs.com/yanshajiuzhou/p/19024072
頁: [1]
查看完整版本: 服务之间远程Feign调用,出现参数丢失