前言最近测试同学反馈上周上线的一个功能偶尔会报404,按理说这个功能通过了测试在测试环境,也是在线运行了几天,为什么突然报错了?一开始以为是前端同学请求的接口不对,但是测试说只是意外的404,概率不高,于是打开日志找到对应的接口,看到了一看接口上定义的@PathVariable,再看参数,基本上肯定是开发者为了偷懒误用了@PathVariable造成的。先说结论:@PathVariable可以将请求参数动态绑定到URL上,但是如果请求参数中包含特殊字符,比如/,可能会导致Spring匹配到错误的URL,或者匹配不到合适的URL。重现下面,我将用一个简单的伪代码重现这个bug,和大家一起分析这个bug产生的原因,以及如何解决,最后顺便通过源码加深一下印象。如下,我们定义一个接口,通过@PathVariable将输入参数动态绑定到URL。@RestController@RequestMapping(value="/demo")publicclassDemoController{@GetMapping(value="/getVal/{val}")publicResponseEntity