Spring Boot 2.0.2.RELEASE中@RestController类级路径未被继承问题
问题原因与解决方案
这不是Spring Boot的Bug,而是你对@RestController注解的用法出现了误解,咱们一步步理清楚:
核心误区:@RestController的value属性不是用来指定请求路径的
@RestController注解继承自@Controller,它的value属性作用是指定该控制器Bean的名称,而非类级别的请求路径前缀。在Spring Boot 2.0.x和1.5.x中,这个属性的作用其实是一致的——你之前在1.5.x中能得到预期路径,大概率是因为当时类上同时标注了@RequestMapping("/user"),只是后来迁移到2.0.x时误将这个注解的职责转移给了@RestController。
正确的实现方式
要实现类级别的路径前缀,必须在控制器类上额外添加@RequestMapping("/user")(或者更具体的@GetMapping/@PostMapping,但@RequestMapping更通用),示例代码如下:
@RestController @RequestMapping("/user") // 这里才是类级路径前缀的正确配置 public class UserController { @PostMapping("/random") public ResponseEntity<String> getRandomUser() { // 你的业务逻辑 return ResponseEntity.ok("随机用户数据"); } }
这样配置后,请求路径就会正确映射为/{server-context}/user/random,和你的预期一致。
为什么1.5.x看起来没问题?
可能是你在1.5.x版本的代码中,控制器类上同时存在@RestController和@RequestMapping("/user"),只是后来重构代码时错误地把@RequestMapping去掉,改成了@RestController("/user"),才导致路径映射不符合预期。本质上两个版本中@RestController的value属性作用没有变化,只是你的用法变了。
内容的提问来源于stack exchange,提问作者Sarvesh Dubey
相关产品推荐
相关产品推荐

