Skip to content

Support annotation-based automatic grouping of APIs in Swagger UI #3104

@mini0192

Description

@mini0192

Content & configuration

Swagger/OpenAPI definition:

plugins { id 'java' id 'org.springframework.boot' version '3.1.5' id 'io.spring.dependency-management' version '1.1.7' } group = 'org.example' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation 'org.junit.jupiter:junit-jupiter' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } test { useJUnitPlatform() }

Swagger-UI configuration options:

SwaggerUI({ // your config options here })
?yourQueryStringConfig 

Is your feature request related to a problem?

Yes. Currently, grouping APIs in Swagger UI requires manually creating GroupedOpenApi beans (in SpringDoc) or configuring repetitive Swagger metadata.
This is tedious and error-prone, especially in large projects with many controllers.
Developers often have to maintain multiple group definitions, which adds unnecessary boilerplate and potential for inconsistencies.

Describe the solution you'd like

Problem / Current Issues

Currently, grouping APIs in Swagger UI requires manually creating GroupedOpenApi beans for each group, for example:

@Bean public GroupedOpenApi userApi() { return GroupedOpenApi.builder() .group("User API") .packagesToScan("mini.controller.user") .build(); } @Bean public GroupedOpenApi productApi() { return GroupedOpenApi.builder() .group("Product API") .packagesToScan("mini.controller.product") .build(); }

Adding annotation-based support for automatic grouping (e.g., @APIGroup) is expected to improve the developer experience by reducing boilerplate and making API organization more intuitive.

example.

@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface ApiGroup { String value(); boolean auth() default false; }
@ApiGroup("users") @RestController @RequestMapping("/users") public class UserController { ... }

When this annotation is applied, Swagger UI should automatically create a group named "users" for all endpoints in that controller.

Describe alternatives you've considered

  • Manually defining GroupedOpenApi beans for each group.
  • Using package-based or path-based grouping.
    Both alternatives are repetitive and require extra maintenance whenever new controllers are added.

Additional context

  • This feature would significantly improve developer productivity and maintainability.
  • Could be implemented as a Spring Boot auto-configuration for SpringDoc/OpenAPI.
  • Supports a cleaner, declarative way to organize API documentation without boilerplate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions