Spring Boot升级后@GetMapping空路径无法同时兼容有无请求参数的问题
Spring Boot升级后@GetMapping空路径无法同时兼容有无请求参数的问题
我有一个Spring Boot应用,在类级别使用了@RequestMapping,方法级别用了@GetMapping。下面是我的控制器简化版本:
@RestController @RequestMapping("/hello") class HelloController { @GetMapping("") fun test(@RequestParam("name", required = false) name: String?): String { return "hello " + (name ?: "world") } }
当我不带name参数调用/hello时,一切正常,返回"hello world"。
但当我调用/hello?name=banana时,却没有按预期工作,出现了以下错误:
No static resource hello.
我试过把@GetMapping("")改成@GetMapping("/"),但这样的话,不带可选参数调用/hello就不行了(带?name=batman时可以正常工作)。有没有办法让Spring Boot同时正确处理两种情况(带请求参数和不带请求参数)?
补充信息:
这是一次回归故障,源于我把Java从17升级到21,同时把Spring Boot从2.7.5升级到3.2.5。在升级之前这个功能是正常工作的。
我注意到Spring Boot的文档中提到:
@RequestMapping不能与同一元素(类、接口或方法)上声明的其他@RequestMapping注解一起使用。如果在同一元素上检测到多个@RequestMapping注解,会记录一条警告,并且只会使用第一个映射。这也适用于组合的@RequestMapping注解,如@GetMapping、@PostMapping等。
但我不确定在我的使用场景下该如何避免这个问题。
备注:内容来源于stack exchange,提问作者Robin Sving
相关产品推荐
相关产品推荐

