情况描述
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 读取输入慢,那只能不要太快按回车了 😂