Spring Boot URL请求返回400而非404问题排查求助
问题分析与解决
问题根源:路径参数正则不兼容实际请求路径
解码后请求路径的实际内容:
你提供的编码URL解码后,路径部分为:/content/storage/path/someid/x/y/resource/{"reltype":"http://ns.example.com/examplecloud/rel/primary"}/:page
其中path对应的片段里包含多个冒号(:),比如http://里的冒号、JSON结构里的冒号。API正则的限制导致解析失败:
你的@Path注解中,path参数的正则是([^\\:]+/|),这里[^\\:]表示只匹配不包含冒号的字符。实际路径里的冒号打破了这个规则,导致JAX-RS在解析请求路径时直接判定为语法错误,返回400 Bad Request——这就是为什么调试器没触发,也没返回404(404是找不到资源,而400是请求本身格式不符合接口定义的规则)。
修复方案
修改路径参数的正则表达式,允许路径中包含冒号。根据需求有两种常见调整方式:
- 最简单的方式,匹配
:page之前的所有内容:@GET @Path("/{path:.*}/:page") @ApiParam(required = true) @PathParam("path") String path - 更精确的匹配,确保
path以斜杠结尾(避免把:page的部分误匹配进去):@GET @Path("/{path:.*[^/]/}:page") @ApiParam(required = true) @PathParam("path") String path
调整后,请求就能正常被解析,进入接口的处理逻辑。
内容的提问来源于stack exchange,提问作者user3023147
相关产品推荐
相关产品推荐

