Spring RestController多RequestParam报错:必填参数'b'不存在
问题分析与解决
这个错误的核心原因不是WSL2的bug,而是你在WSL2的bash环境中执行curl命令时,&符号被shell解析成了后台执行的分隔符,导致实际发送给Spring的请求只包含a=foo参数,b=bar并没有被作为URL的一部分发送。
解决方法
有两种方式可以避免这个问题:
- 把整个URL用双引号包裹:
curl "http://localhost:8080/test?a=foo&b=bar" - 对
&符号进行转义:curl http://localhost:8080/test?a=foo\&b=bar
验证方式
你可以先执行以下命令看shell如何解析你的原始请求:
echo http://localhost:8080/test?a=foo&b=bar
输出结果只会显示http://localhost:8080/test?a=foo,同时后台会出现b=bar: command not found的错误,这就证明了&被shell拆分了,没有作为URL参数的一部分传递。
额外排查点
如果上述方法无效,再检查你的控制器代码:
- 确认
b参数是否正确添加了@RequestParam注解,且参数名拼写一致(比如不要写成B或者其他错误名称) - 确认没有意外设置
required=false但代码逻辑里又依赖该参数的情况
内容的提问来源于stack exchange,提问作者worldsayshi
相关产品推荐
相关产品推荐

