Spring Boot2.5.5升级2.5.6后@RepositoryRestController类加@RequestMapping报错如何解决
问题原因
Spring Boot 2.5.6 配套的 Spring Data REST 3.5.6 版本新增了校验逻辑,禁止被@RepositoryRestController修饰的控制器在类级别使用@RequestMapping注解。
2.5.5 及更低版本没有该校验逻辑,所以升级前可以正常运行。官方新增该校验的核心原因是:@RepositoryRestController本身会被 Spring Data REST 的处理器映射扫描,同时类上的@RequestMapping会被 Spring MVC 默认处理器映射识别,两套扫描逻辑会导致同一个接口被重复注册,可能引发路由冲突、请求处理逻辑异常的问题。
解决方法
你可以根据业务需求选择以下任意一种方案:
- 方案一:保留
@RepositoryRestController,把类上的@RequestMapping路径拆分到每个方法的请求注解上
修改后代码示例:
@RepositoryRestController @RequiredArgsConstructor public class WidgetController { private final @NotNull WidgetHandler widgetHandler; @GetMapping("/api/widgets") public ResponseEntity<List<Widget>> widgets() { return ResponseEntity.ok().body(widgetHandler./*...*/); } // 其他方法的路径同样补充/api/widgets前缀即可 }
- 方案二:如果你的业务不需要使用 Spring Data REST 的特性,直接把类上的
@RepositoryRestController替换为普通的@RestController即可,不需要调整原有路径配置
修改后代码示例:
@RestController @RequestMapping("/api/widgets") @RequiredArgsConstructor public class WidgetController { private final @NotNull WidgetHandler widgetHandler; @GetMapping public ResponseEntity<List<Widget>> widgets() { return ResponseEntity.ok().body(widgetHandler./*...*/); } // ... }
内容的提问来源于stack exchange,提问作者Jan Nielsen
相关产品推荐
相关产品推荐

