You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:15:07