由多线程导致的request请求参数获取不到问题

症状

代码还是按照常规写法写的,莫名其妙的忽然使用request拿不到参数。

43491f987c642d7ab9bc5ead966d5312ff7.jpg

如上面的代码,springmvc帮我们自动做的映射数据拿不到数据,使用request.getParameter("dpId") 也拿不到数据。 @RequestParam  等等方式都试过就是拿不到。

再说页面,这个bug还神奇的在这里,先说业务,我们这个系统会先进入一个页面,这个页面是一个数据下发状态的显示,这时候用户会有一个操作,点击页面的下发数据操作,这时候后台会启动一个线程执行下发数据操作(这个操作是很耗时的),线程启动后返回,前端判断已经启动成功,就会再次刷新这个页面。这个时候,就会出现上面这个错误,拿不到前端参数,如果切换到其他的页面,还是可以正常获取参数。

定位过程:最开始是怀疑请求的方式有问题,换了get  post ,参数都有就是拿不到,然后怀疑是请求的类型有问题,

7be6e6f1ebc87d3a90f460fb1930983eb32.jpg

这些换了还是存在这个问题,然后配置打开tomcat的容器日志,

dc01f08bf08dc073050b8156ca06773aa21.jpg

可以看到参数是被tomcat拿到了的,基本可以排除是前端的问题了,那后端就可能是拦截器这里搞的鬼,再次检查全部的拦截器,这时候发现

request.getQueryString();

可以拿到参数,request.getParmeter 还是拿不到参数,然后各种bug排查,最终还是没定位到。最后,异想天开的将

3e5847a8aa654d31c2908487460fc1f721b.jpg

如上代码,启动线程这一块注释掉,可以获取到参数了,问题终于定位到是多线程这里的问题。

那到底是哪里的问题呢?

线程中的各种异常都处理了,唯一有点不一样的是,request是传入的,这个类我并不太了解,会不会是这里的问题,将request中的数据拿出来后,单独传入必要的参数后,问题解决了,基本可以确定是request传入到多线程中导致的问题了,而且也可以解释因为为什么第二次请求会有问题,切换页面请求又没有问题了,很大可能就是request是同一个request导致的。

转载于:https://my.oschina.net/sprouting/blog/3045489

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值