如何在保持单端点独立类的同时在Swagger中分组接口?
实现Swagger接口分组的几种方案(保持端点类独立)
当然可以做到,以下是几种实用方案,无需合并端点类就能让Swagger把这些CRUD接口归为同一组展示:
1. 统一设置Swagger标签
不管使用Springfox还是SpringDoc,给每个独立的端点类指定相同的标签名,Swagger会自动将同标签的接口归为一组。
示例(SpringDoc)
在所有文本CRUD的端点类上添加@Tag注解,统一使用同一个组名:
@RestController @RequestMapping("/api/v1/applications/{applicationCode}/texts") @Tag(name = "文本管理") // 所有CRUD类共用此标签 public class CreateTextEndpoint { @PostMapping @Operation(summary = "创建文本") public ResponseEntity<Void> createText(...) { // 业务逻辑 } } @RestController @RequestMapping("/api/v1/applications/{applicationCode}/texts") @Tag(name = "文本管理") // 统一标签 public class FindTextEndpoint { @GetMapping @Operation(summary = "查询文本列表") public ResponseEntity<List<Text>> findTexts(...) { // 业务逻辑 } }
如果用的是Springfox,替换为@Api(tags = "文本管理")即可。
2. 按路径前缀自动分组
若不想逐个修改端点类,可通过Swagger的分组配置,根据接口路径前缀自动归类。
示例(SpringDoc)
新增配置类,通过GroupedOpenApi指定路径匹配规则:
@Configuration public class SwaggerConfig { @Bean public GroupedOpenApi textManagementGroup() { return GroupedOpenApi.builder() .group("文本管理") .pathsToMatch("/api/v1/applications/*/texts/**") // 匹配该路径下所有接口 .build(); } }
所有符合该路径规则的接口会自动被分到"文本管理"组,无需修改现有端点类注解。
3. 自定义分组逻辑(复杂场景)
如果需要更灵活的规则(比如根据类命名前缀、自定义注解判断),可以实现Swagger扩展接口定制分组逻辑。
比如在SpringDoc中,实现OpenApiCustomizer接口统一调整标签:
@Component public class TextApiGroupCustomizer implements OpenApiCustomizer { @Override public void customise(OpenApi openApi) { openApi.getPaths().values().forEach(pathItem -> { pathItem.readOperations().forEach(operation -> { // 根据接口路径或原标签判断是否为文本相关接口 if (operation.getTags().stream().anyMatch(tag -> tag.contains("Text"))) { operation.setTags(List.of("文本管理")); } }); }); } }
内容的提问来源于stack exchange,提问作者José Puente Fuentes
相关产品推荐
相关产品推荐

