当前位置:   article > 正文

springboot 整合 knife4j-openapi3_knife4j-openapi3-spring-boot-starter

knife4j-openapi3-spring-boot-starter

适用于:项目已使用shiro安全认证框架,整合knife4j-openapi3

1.引入依赖

  1. <!-- knife4j-openapi3 -->
  2. <dependency>
  3. <groupId>com.github.xiaoymin</groupId>
  4. <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
  5. <version>4.1.0</version>
  6. </dependency>

2.配置类

  1. package com.xidian.contest.configure;
  2. import io.swagger.v3.oas.models.ExternalDocumentation;
  3. import io.swagger.v3.oas.models.OpenAPI;
  4. import io.swagger.v3.oas.models.info.Contact;
  5. import io.swagger.v3.oas.models.info.Info;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. @Configuration
  9. public class OpenApiConfig {
  10. @Bean
  11. public OpenAPI openAPI() {
  12. return new OpenAPI()
  13. .info(new Info().title("竞赛报名管理系统接口文档")
  14. .description("竞赛报名管理系统接口文档")
  15. .version("v1.0")
  16. .contact(new Contact().name("TYJ").url("localhost:8085/login")))
  17. .externalDocs(new ExternalDocumentation()
  18. .description("Github example code")
  19. .url("https://github.com/"));
  20. }
  21. }

3.yaml配置

  1. # spring-doc 接口文档
  2. springdoc:
  3. api-docs:
  4. enabled: true
  5. #分组配置
  6. group-configs:
  7. - group: 'default'
  8. #匹配的路径
  9. paths-to-match: '/**'
  10. #扫描的包
  11. packages-to-scan: com.xidian.contest.controller
  12. default-flat-param-object: true
  13. # knife4j的增强配置,不需要增强可以不配
  14. knife4j:
  15. enable: true
  16. setting:
  17. language: zh_cn

4.shiro拦截权限设置

  1. definition.addPathDefinition("/doc.html", "anon");
  2. definition.addPathDefinition("/swagger-resources", "anon");
  3. definition.addPathDefinition("/v3/api-docs/**", "anon");
  4. definition.addPathDefinition("/webjars/**", "anon");
  5. definition.addPathDefinition("/doc.html#/**", "anon");
  6. definition.addPathDefinition("/swagger-ui.html", "anon");
  7. definition.addPathDefinition("/static/**", "anon");

5.启动项目

http://localhost:+端口号+/doc.html



6.常用注解

@Tag

用于说明或定义的标签。
部分参数:
●name:名称
●description:描述


@Schema

用于描述实体类属性的描述、示例、验证规则等,比如 POJO 类及属性。
部分参数:
●name:名称
●title:标题
●description:描述
●example:示例值
●required:是否为必须
●format:属性的格式。如 @Schema(format = "email")
●maxLength 、 minLength:指定字符串属性的最大长度和最小长度
●maximum 、 minimum:指定数值属性的最大值和最小值
●pattern:指定属性的正则表达式模式
●type: 数据类型(integer,long,float,double,string,byte,binary,boolean,date,dateTime,password),必须是字符串。如 @Schema=(type="integer")
●implementation :具体的实现类,可以是类本身,也可以是父类或实现的接口


@Content

内容注解。 部分参数:
●mediaType:内容的类型。比如:application/json
●schema:内容的模型定义,使用 @Schema 注解指定模型的相关信息。

  1. @RequestBody(content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class)))
  2. @PostMapping("/users")
  3. public void createUser(User user) {
  4. // ...
  5. }

@Hidden

某个元素(API 操作、实体类属性等)是否在 API 文档中隐藏。 如,getUserById 方法不会显示在 API 文档中

  1. @Hidden
  2. @GetMapping("/users/{id}")
  3. public User getUserById(@PathVariable("id") Long id) {
  4. // ...
  5. }

代码参考: 使用在实体类字段中,实现对敏感信息或不需要公开的元素进行隐藏。如:用户密码字段

  1. @Schema(description = "用户")
  2. public class User {
  3. @Schema(description = "用户id")
  4. private Long id;
  5. @Schema(description = "用户名")
  6. private String name;
  7. @Hidden
  8. @Schema(description = "用户密码")
  9. private String password;
  10. // ...
  11. }

@Operation

描述 API 操作的元数据信息。常用于 controller 上 部分参数:
●summary:简短描述
●description :更详细的描述
●hidden:是否隐藏
●tags:标签,用于分组API
●operationId:操作的唯一标识符,建议使用唯一且具有描述性的名称
●parameters:指定相关的请求参数,使用 @Parameter 注解来定义参数的详细属性。
●requestBody:指定请求的内容,使用 @RequestBody 注解來指定请求的类型。
●responses:指定操作的返回内容,使用 @ApiResponse 注解定义返回值的详细属性。

  1. @Operation(
  2. summary = "操作摘要",
  3. description = "操作的详细描述",
  4. operationId = "operationId",
  5. tags = "tag1",
  6. parameters = {
  7. @Parameter(name = "param1", description = "参数1", required = true),
  8. @Parameter(name = "param2", description = "参数2", required = false)
  9. },
  10. requestBody = @RequestBody(
  11. description = "请求描述",
  12. required = true,
  13. content = @Content(
  14. mediaType = "application/json",
  15. schema = @Schema(implementation = RequestBodyModel.class)
  16. )
  17. ),
  18. responses = {
  19. @ApiResponse(responseCode = "200", description = "成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))),
  20. @ApiResponse(responseCode = "400", description = "错误", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponseModel.class)))
  21. }
  22. )
  23. @Tag(name = "标签1")
  24. @ApiResponses(value = {
  25. @ApiResponse(responseCode = "200", description = "成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))),
  26. @ApiResponse(responseCode = "400", description = "錯誤", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponseModel.class)))
  27. })
  28. public void yourOperation() {
  29. // 逻辑
  30. }

详细参考:

  1. @Operation(summary = "文件分页显示接口")
  2. @Parameters({
  3. @Parameter(
  4. name = "pageNum",
  5. description = "分页数",
  6. required = true,
  7. in = ParameterIn.QUERY,
  8. schema = @Schema(type = "Integer")
  9. ),
  10. @Parameter(
  11. name = "pageSize",
  12. description = "每页大小",
  13. required = true,
  14. in = ParameterIn.QUERY,
  15. schema = @Schema(type = "Integer")
  16. ),
  17. @Parameter(
  18. name = "name",
  19. description = "要查询文件名称",
  20. in = ParameterIn.QUERY,
  21. schema = @Schema(type = "string")
  22. )
  23. })
  24. @RequiresRoles("admin")
  25. @GetMapping("/page")
  26. public IPage<Files> findPage(@RequestParam Integer pageNum,
  27. @RequestParam Integer pageSize,
  28. @RequestParam(defaultValue = "") String name)

image.png


@Parameter

用于描述 API 操作中的参数 部分参数:
●name : 指定的参数名
●in:参数来源,可选 query、header、path 或 cookie,默认为空,表示忽略
        ○ParameterIn.QUERY 请求参数
        ○ParameterIn.PATH 路径参数
        ○ParameterIn.HEADER header参数
        ○ParameterIn.COOKIE cookie 参数
●description:参数描述
●required:是否必填,默认为 false
●schema :参数的数据类型。如 schema = @Schema(type = "string")
代码参考:

  1. @Parameters({
  2. @Parameter(
  3. name = "param1",
  4. description = "Parameter 1 description",
  5. required = true,
  6. in = ParameterIn.PATH,
  7. schema = @Schema(type = "string")
  8. ),
  9. @Parameter(
  10. name = "param2",
  11. description = "Parameter 2 description",
  12. required = true,
  13. in = ParameterIn.QUERY,
  14. schema = @Schema(type = "integer")
  15. )
  16. })


@Parameters

包含多个 @Parameter 注解,指定多个参数。 代码参考: 包含了 param1 和 param2 两个参数
@RequestBody
API 请求的注解
●description:请求信息的描述
●content:请求的内容
●required:是否必须


@ApiResponse

API 的响应信息。 部分参数:
●responseCode:响应的 HTTP 状态码
●description:响应信息的描述
●content:响应的内容
代码参考:

  1. @ApiResponse(responseCode = "200", description = "查询成功", content = @Content(schema = @Schema(implementation = User.class)))
  2. @ApiResponse(responseCode = "404", description = "查询失败")
  3. @GetMapping("/users/{id}")
  4. public ResponseEntity<User> getUserById(@PathVariable("id") Long id) {
  5. // ...
  6. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/891329
推荐阅读
相关标签
  

闽ICP备14008679号