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

Spring Boot中如何通过Swagger在OpenApi中排除Repository端点

解决方案:在OpenApiConfig中过滤Repository端点

你可以通过添加OpenApiCustomiser或者GroupedOpenApi来过滤掉Spring Data REST生成的Repository端点,无需在Repository类上添加@Hidden注解。以下是两种可行的实现方式:

方式一:通过Tag标识精准过滤

Spring Data REST生成的接口默认会带上Spring Data REST标签,我们可以基于这个标签移除所有相关操作:

@Configuration
class OpenApiConfig {

    @Value("${application.title}")
    private String title;

    @Value("${application.licenseName}")
    private String licenseName;

    @Bean
    public OpenAPI customOpenAPI(@Value("${application.description}") String description,
                                 @Value("${application.version}") String version) {
        return new OpenAPI()
                .info(new Info().title(title)
                        .version(version)
                        .description(description)
                        .license(new License().name(licenseName)));
    }

    // 添加过滤器移除Spring Data REST相关接口
    @Bean
    public OpenApiCustomiser excludeSpringDataRestEndpoints() {
        return openApi -> openApi.getPaths().values().removeIf(pathItem ->
                pathItem.readOperations().stream()
                        .anyMatch(operation -> operation.getTags().contains("Spring Data REST"))
        );
    }
}

方式二:通过路径前缀直接排除

如果你的Repository端点有统一的路径前缀(比如默认的/api/**),可以直接通过路径规则排除:

@Configuration
class OpenApiConfig {

    @Value("${application.title}")
    private String title;

    @Value("${application.licenseName}")
    private String licenseName;

    @Bean
    public OpenAPI customOpenAPI(@Value("${application.description}") String description,
                                 @Value("${application.version}") String version) {
        return new OpenAPI()
                .info(new Info().title(title)
                        .version(version)
                        .description(description)
                        .license(new License().name(licenseName)));
    }

    // 配置分组API,排除指定路径下的Repository端点
    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .group("public-api")
                .pathsToMatch("/**")
                .pathsToExclude("/api/**") // 替换为你的Repository实际路径前缀
                .build();
    }
}

说明

  • 方式一精准性更高,不会误过滤其他业务接口,适合不确定Repository路径前缀的场景;
  • 方式二更简洁直接,适合Repository路径有统一规则的场景,需根据实际配置调整pathsToExclude的值;
  • 两种方案都无需修改任何Repository类,完全在OpenApiConfig中完成配置。

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:35:15