Springboot @PathVariable参数丢失?PostMan背锅!


情况描述

SpringBoot 中控制器的参数可以使用@PathVariable获取url中的参数

例如:

@DeleteMapping("/deleteUser/{userId}")
public void deleteUser(@PathVariable("userId")int userId, HttpServletRequest request) {
    adminService.delete(userId);
}

在使用postman测试过程中,发现了在快速变更参数时,会出现最后一位字符丢失的情况。

比如 /deleteUser/123被读取到的参数是12

还是得吐槽 CSDN、博客园这些平台,都什么垃圾,全都是复制粘贴,或者爬虫互相爬。满屏的都是一样的文章。

搜出来这个注解确实有丢失参数的情况:参数包含了特殊字符例如小数点

但是这与我的情况不符,我只有数字啊,那只能自己找问题

bug 定位

  • 打印 request 发现是 url 就已经丢失了参数的部分信息,所以排除@PathVariable的嫌疑

  • 虽然没看过 SpringBoot 源码,但是总不至于修改 request 吧,那么可以认定的 postman 的问题

那怎么找到这个 bug 出现的原因呢?

测试发现,同一个参数(即同一个url),多次发送请求的情况下,只有第一次有概率丢失参数,后面几次请求从未出现过丢失参数的情况。

而第一次和后面几次的区别就是:第一次我们手动修改(输入)了参数

虽然不是很严谨,但是基本可以确定问题出在 postman 的输入框上了

结论

学过 Vue 的话应该很熟悉双向绑定,我个人理解,postman 的这个输入框在进行双向绑定的时候效率比较低,导致了我按下回车的时候内部的 url 还是上一次变更时的状态

我们输入肯定是从左到右输入的,这也就解释了为什么只会丢失最后一位字符

postman 每次更新都是越来越臃肿,从以前的秒开到现在的开起来先卡一会,真的越变越拉了🤔

解决方案

哪有什么解决方案,postman 读取输入慢,那只能不要太快按回车了 😂


文章作者: ❤纱雾
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ❤纱雾 !
评论
  目录