@RequestParam 参数偶尔丢失的解决

 更新时间:2021年10月25日 11:40:35   作者:QMCoder  
这篇文章主要介绍了@RequestParam 参数偶尔丢失的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@RequestParam参数丢失

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

然后getParameterNames();

在这里插入图片描述

最终处理查询参数

在这里插入图片描述

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

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

在这里插入图片描述

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

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

@RequestParam的用法注意事项

作用

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

举例来说:

在这里插入图片描述

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

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

@RequestParam属性

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

在这里插入图片描述

注意

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis Plus 导入IdType失败的解决

    MyBatis Plus 导入IdType失败的解决

    这篇文章主要介绍了MyBatis Plus 导入IdType失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 详解IntelliJ IDEA中TortoiseSVN修改服务器地址的方法

    详解IntelliJ IDEA中TortoiseSVN修改服务器地址的方法

    这篇文章主要介绍了详解IntelliJ IDEA中TortoiseSVN修改服务器地址的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 利用java批量给pdf加水印的方法示例

    利用java批量给pdf加水印的方法示例

    这篇文章主要介绍了利用java批量给pdf加水印的方法,文中给出了简单的示例代码,需要的朋友可以参考借鉴,下面来一起看吧。
    2017-03-03
  • java 请求跨域问题解决方法实例详解

    java 请求跨域问题解决方法实例详解

    这篇文章主要介绍了java 请求跨域问题解决方法实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • IDEA SpringBoot:Cannot resolve configuration property配置文件问题

    IDEA SpringBoot:Cannot resolve configuration&

    这篇文章主要介绍了IDEA SpringBoot:Cannot resolve configuration property配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • springcloud3 Sentinel的搭建及案例操作方法

    springcloud3 Sentinel的搭建及案例操作方法

    Sentinel是分布式系统流量控制的哨兵,阿里开源的一套服务容错的综合性解决方案,这篇文章主要介绍了springcloud3 Sentinel的搭建以及案例操作,需要的朋友可以参考下
    2023-01-01
  • java:提示程序包org.junit不存在时的解决方案

    java:提示程序包org.junit不存在时的解决方案

    这篇文章主要介绍了java:提示程序包org.junit不存在时的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 分析SpringBoot的启动原理

    分析SpringBoot的启动原理

    这篇文章主要分析了SpringBoot的启动原理,帮助大家更好的理解和使用spring boot框架,感兴趣的朋友可以了解下
    2020-09-09
  • java导出csv方法实现讲解

    java导出csv方法实现讲解

    这篇文章主要介绍了java导出csv的方法,客户要求在项目中有导出CSV文件的功能,并且给出了如何在不知道如何在不知道对象类型(没有应用泛型)的List中如何得到对象的属性值,下面就详细说下这个功能是如何实现的
    2013-12-12
  • Java 中jasperReport实现动态列打印的实现代码

    Java 中jasperReport实现动态列打印的实现代码

    这篇文章主要介绍了Java 中jasperReport实现动态列打印的实现代码的相关资料,希望通过本文大家能掌握这部分内容,需要的朋友可以参考下
    2017-09-09

最新评论