SpringDoc OpenAPI tự generate OpenAPI 3 spec từ controller/DTO — không viết YAML thủ công. Thêm springdoc-openapi-starter-webmvc-ui.
Out of the box: GET /v3/api-docs (JSON spec), GET /swagger-ui.html (UI tương tác).
Customize:
java
@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 = "Lấy user theo ID")
@GetMapping("/{id}")
User get(@PathVariable Long id) { ... }Tắt trên production: springdoc.swagger-ui.enabled: false, springdoc.api-docs.enabled: false. Vs Springfox: Springfox (Swagger 2) ngừng maintain (2020) → dùng SpringDoc cho Spring Boot 3+. CI: generate client SDK từ spec bằng openapi-generator → tránh "API contract drift".