SpringDoc OpenAPI tự động generate OpenAPI 3 spec từ controller/DTOs — không cần viết YAML thủ công.
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.7.0</version>
</dependency>Out of the box:
- GET /v3/api-docs → JSON spec
- GET /swagger-ui.html → interactive UI
Customize:
// Metadata
@Bean
OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info()
.title("My API")
.version("1.0")
.description("Spring Boot REST API"))
.addSecurityItem(new SecurityRequirement().addList("bearerAuth"))
.components(new Components()
.addSecuritySchemes("bearerAuth",
new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")));
}
// Annotate controller
@Operation(summary = "Lấy user theo ID")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "Tìm thấy"),
@ApiResponse(responseCode = "404", description = "Không tìm thấy")
})
@GetMapping("/{id}")
User get(@PathVariable Long id) { ... }# Disable trên production
springdoc:
swagger-ui.enabled: false
api-docs.enabled: falseVs Springfox: Springfox (Swagger 2) không còn được maintain (2020). Dùng SpringDoc cho Spring Boot 3+.
CI integration: generate client SDK từ OpenAPI spec bằng openapi-generator — frontend/mobile dùng typed client, tránh "API contract drift".
SpringDoc OpenAPI auto-generates an OpenAPI 3 spec from controllers and DTOs — no manual YAML needed.
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.7.0</version>
</dependency>Out of the box:
- GET /v3/api-docs → JSON spec
- GET /swagger-ui.html → interactive UI
Customisation:
@Bean
OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info().title("My API").version("1.0"))
.addSecurityItem(new SecurityRequirement().addList("bearerAuth"))
.components(new Components()
.addSecuritySchemes("bearerAuth",
new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")));
}
@Operation(summary = "Get user by ID")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "Found"),
@ApiResponse(responseCode = "404", description = "Not found")
})
@GetMapping("/{id}")
User get(@PathVariable Long id) { ... }# Disable in production
springdoc:
swagger-ui.enabled: false
api-docs.enabled: falsevs Springfox: Springfox (Swagger 2) is no longer maintained (since 2020). Use SpringDoc for Spring Boot 3+.
CI integration: generate typed client SDKs from the OpenAPI spec via openapi-generator — eliminates "API contract drift".