gpt4 book ai didi

@RequestParam 参数偶尔丢失的解决

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章@RequestParam 参数偶尔丢失的解决由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

@RequestParam参数丢失

改动过一版代码之后, 发现@RequestParam注解的参数经常丢失. 。

首先确认前端确实把参数传过来了,用curl直接请求接口, 发现有时候会出现参数丢失, 重启后再用curl请求某个丢失参数的接口, 无论怎么重试都不会有问题. 。

没办法了, 只好去跟tomcat的源码, 因为@RequestParam的参数会从request.getParameterMap()方法里取对应的值, 然后打个断点看tomcat怎么获取的 。

@RequestParam 参数偶尔丢失的解决

最终跟到这个类里, 实现方法 。

@RequestParam 参数偶尔丢失的解决

最终走到coyoteRequest的getParameters方法, 实现很简单 。

@RequestParam 参数偶尔丢失的解决

然后getParameterNames(),

@RequestParam 参数偶尔丢失的解决

最终处理查询参数 。

@RequestParam 参数偶尔丢失的解决

最终就是从queryMB这个参数解析出来, 这个queryMB就是请求时传过来的参数.

那就看看当getParameterMap为空的时候, queryMB是否为空, 来判定tomcat一定是接到了参数 。

@RequestParam 参数偶尔丢失的解决

然后发现queryMB有值, 但是似乎好像上面的方法没有把这个参数解析出来, 开始怀疑一定是某个接口改了什么东西, 因为Request是可以被循环利用的, 但是这个request被再次使用一定是请求结束了, 后来怀疑是使用了deferedResult, 但也被排除了, 因为deferedResult会使用servlet3.0以上的异步方式, request不会被提前循环使用 。

百思不得其解的时候同时看了这篇文章豁然开朗,(后来发现有一个导入功能比较耗时, 被放在了一个纯异步的方法里, 访问的方法里有一个方法被切面切掉了, 并且里面获取了request.getParameter) request可以传递到异步线程, 但要保证在请求返回之前访问, 如deferedResult set值之前. (为了避免这种情况,还是尽量不要传到异步线程里了). 。

  。

@RequestParam的用法注意事项

作用

@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解) 。

举例来说:

@RequestParam 参数偶尔丢失的解决

如果你的@RequestParam的Value属性为 pId 那么在请求的链接就是 。

http://localhost:8080/api/findBByParkId?pId=1 。

@RequestParam属性

  • value / name:请求参数中的名称 (必写参数)
  • required:请求参数中是否必须提供此参数,默认值是true,true为必须提供default
  • Value:默认值 测试成功

@RequestParam 参数偶尔丢失的解决

注意

@RequestParam 参数偶尔丢失的解决

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/qq_19457117/article/details/99125623 。

最后此篇关于@RequestParam 参数偶尔丢失的解决的文章就讲到这里了,如果你想了解更多关于@RequestParam 参数偶尔丢失的解决的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com