赞
踩
在pom.xml
中添加Springdoc OpenAPI的依赖:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.0</version>
</dependency>
springdoc: api-docs: path: /api-docs # 配置 OpenAPI 文档的路径 swagger-ui: path: /swagger-ui.html # 配置 Swagger UI 的路径 enabled: true # 启用 Swagger UI # 定制文档基本信息 info: title: API 文档标题 # 设置文档标题 description: API 文档描述 # 设置文档描述 version: 1.0.0 # 设置 API 版本 terms-of-service: https://example.com/terms # 服务条款 URL # 关于开发者 contact: name: 开发者姓名 # 开发者联系人姓名 url: https://example.com/contact # 联系方式 URL email: dev@example.com # 开发者联系邮箱 # 关于许可证 license: name: Apache 2.0 # 许可证名称 url: https://www.apache.org/licenses/LICENSE-2.0.html # 许可证 URL # 定制服务器基本信息 servers: - url: http://localhost:8080 # 服务器 URL description: 本地服务器 # 服务器描述 - url: https://api.example.com # 服务器 URL description: 生产服务器 # 服务器描述 # 定制外部文档信息 external-docs: description: 外部文档描述 # 外部文档描述 url: https://example.com/docs # 外部文档 URL
springdoc.api-docs.path=/api-docs springdoc.swagger-ui.path=/swagger-ui.html springdoc.swagger-ui.enabled=true springdoc.info.title=API 文档标题 springdoc.info.description=API 文档描述 springdoc.info.version=1.0.0 springdoc.info.terms-of-service=https://example.com/terms springdoc.info.contact.name=开发者姓名 springdoc.info.contact.url=https://example.com/contact springdoc.info.contact.email=dev@example.com springdoc.info.license.name=Apache 2.0 springdoc.info.license.url=https://www.apache.org/licenses/LICENSE-2.0.html springdoc.servers[0].url=http://localhost:8080 springdoc.servers[0].description=本地服务器 springdoc.servers[1].url=https://api.example.com springdoc.servers[1].description=生产服务器 springdoc.external-docs.description=外部文档描述 springdoc.external-docs.url=https://example.com/docs
import org.springdoc.core.customizers.OpenApiCustomizer; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import io.swagger.v3.oas.models.ExternalDocumentation; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Contact; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; import io.swagger.v3.oas.models.servers.Server; @Configuration public class OpenApiConfig { // OpenAPI类用于定制全局文档信息 @Bean public OpenAPI customOpenAPI() { return new OpenAPI() // 定制文档基本信息 .info(new Info() //关于文档信息 .title("API 文档标题") .description("API 文档描述") .version("1.0.0") .termsOfService("https://example.com/terms") //关于作者 .contact(new Contact() .name("开发者姓名") .url("https://example.com/contact") .email("dev@example.com")) //关于许可证 .license(new License() .name("Apache 2.0") .url("https://www.apache.org/licenses/LICENSE-2.0.html"))) //配置服务器信息 .servers(List.of( new Server().url("http://localhost:8080").description("本地服务器"), new Server().url("https://api.example.com").description("生产服务器"))) //配置外部文档信息 .externalDocs(new ExternalDocumentation() .description("外部文档描述") .url("https://example.com/docs")); } // GroupedOpenApi类用于API分组 @Bean public GroupedOpenApi publicApi() { return GroupedOpenApi.builder() .group("public") .pathsToMatch("/api/**") .build(); } // OpenApiCustomizer类用于自定义OpenAPI对象,比如全局添加头部信息。 @Bean public OpenApiCustomizer customerGlobalHeaderOpenApiCustomizer() { return openApi -> openApi.info( new Info().title("自定义 API 文档") .description("自定义 API 文档描述") .version("1.0.0") ); } }
OpenAPI
类:用于设置全局的 API 文档信息,例如标题、描述、版本、联系信息、许可证、服务器和外部文档等。GroupedOpenApi
类:用于将 API 分组。例如,可以将公共 API 和私有 API 分开。OpenApiCustomizer
接口:用于自定义 OpenAPI 对象,例如全局添加头部信息等Springdoc OpenAPI使用一系列的注解来增强和定制API文档。常用的注解包括@Operation
、@Parameter
、@Schema
等。
import org.springframework.web.bind.annotation.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; @RestController @RequestMapping("/api") public class UserController { @Operation(summary = "获取用户信息", description = "根据用户ID获取用户详细信息") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "成功"), @ApiResponse(responseCode = "404", description = "用户未找到") }) @GetMapping("/users/{id}") public User getUserById(@PathVariable Long id) { // 实现获取用户的逻辑 return new User(); } @Operation(summary = "创建新用户", description = "创建一个新的用户") @PostMapping("/users") public User createUser(@RequestBody CreateUserRequest request) { // 实现创建用户的逻辑 return new User(); } }
import io.swagger.v3.oas.annotations.media.Schema;
@Schema(description = "用户实体")
public class User {
@Schema(description = "用户ID", example = "1")
private Long id;
@Schema(description = "用户名", example = "john_doe")
private String username;
@Schema(description = "用户年龄", example = "25")
private Integer age;
// getters and setters
}
启动Spring Boot应用后,访问http://localhost:8080/swagger-ui.html
可以查看生成的API文档界面。
@Operation
注解用于描述一个具体的API操作。它可以添加到控制器的方法上,用于定义操作的基本信息。
属性:
summary
:操作的简要描述。description
:操作的详细描述。tags
:与操作相关的标签。operationId
:操作的唯一标识符。parameters
:操作的参数列表。responses
:操作的响应列表。示例:
@Operation(
summary = "获取用户信息",
description = "根据用户ID获取用户详细信息",
tags = {"用户操作"},
operationId = "getUserById"
)
@RequestMapping("/users")
public User getUserById(@PathVariable Long id) {
// 实现逻辑
}
@Parameter
注解用于描述方法参数。它可以添加到控制器方法的参数上。
属性:
name
:参数名。description
:参数描述。required
:是否必需参数。in
:参数所在位置(query、header、path、cookie)。示例:
@Operation(summary = "删除用户")
@DeleteMapping("/users/{id}")
public void deleteUser(@Parameter(description = "用户ID", required = true) @PathVariable Long id){
// 实现逻辑
}
@RequestBody
注解用于描述请求体中的内容。它通常添加到方法的参数上,标识该参数是请求体。
属性:
description
:请求体的描述。required
:是否必需。示例:
@Operation(summary = "创建新用户")
@PostMapping("/users")
public User createUser(@RequestBody(description = "用户创建请求", required = true) CreateUserRequest request)
{
// 实现逻辑
}
@ApiResponse
注解用于描述单个API响应,而@ApiResponses
注解用于包含多个@ApiResponse
注解。
属性:
responseCode
:响应代码。description
:响应描述。content
:响应内容。示例:
@Operation(summary = "获取用户信息")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "成功获取用户信息"),
@ApiResponse(responseCode = "404", description = "用户未找到")
})
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// 实现逻辑
}
@Schema
注解用于描述实体类及其属性。它可以添加到类和属性上。
属性:
description
:模型或属性的描述。example
:示例值。required
:必需属性。hidden
:是否隐藏属性。示例:
@Schema(description = "用户实体")
public class User {
@Schema(description = "用户ID", example = "1")
private Long id;
@Schema(description = "用户名", example = "john_doe")
private String username;
@Schema(description = "用户年龄", example = "25")
private Integer age;
// getters and setters
}
@Tag
注解用于为API操作分组。可以添加到类或方法上。
属性:
name
:标签名。description
:标签描述。示例:
@Tag(name = "用户操作", description = "与用户相关的操作")
@RestController
@RequestMapping("/api")
public class UserController {
// 控制器方法
}
@Hidden
注解用于隐藏API操作、参数或模型属性,不在生成的文档中显示。
示例:
@Hidden
@GetMapping("/hidden")
public void hiddenMethod() {
// 实现逻辑
}
@Content
注解用于描述请求或响应的内容,而@MediaType
注解用于指定内容类型。
示例:
@Operation(summary = "创建新用户")
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "用户创建成功",
content = @Content(mediaType = "application/json",
schema = @Schema(implementation = User.class)
)
)
})
@PostMapping("/users")
public User createUser(@RequestBody CreateUserRequest request) {
// 实现逻辑
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。