相信使用 Java 开发的人,对 Swagger 一定不会感到陌生,不过个人对 Swagger 一直没有太多好感,因为他的 UI 实在太难看了,用起来也颇为不顺手,所以国内有人开发了 knife4j 对 Swagger 进行增强,随着时间的推移,现在很多项目都在从 Java8 到 Java17,SpringBoot2 到 SpringBoot3 的迁移,发现 knife4j 现在也开始做了支持,而且用起来更方便。下面简单说一说如何使用。

  1. 引入依赖
<dependency>  
  <groupId>com.github.xiaoymin</groupId>  
  <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>  
  <version>4.5.0</version>  
</dependency>

从中我们可以看到 artifactId 做了全新的修改,这个需要注意。另外 Spring Boot 3 只支持 OpenAPI3 规范。Knife4j提供的 starter 已经引用 springdoc-openapi 的 jar,大家需注意避免 jar 包冲突,引入之后,其余的配置,开发者即可完全参考 springdoc-openapi 的项目说明,Knife4j 只提供了增强部分,如果要启用 Knife4j 的增强功能,可以在配置文件中进行开启,其实个人测试就算完全不配置,此时也已经可以通过 http://ip:port/doc.html 查看文档:

knife4j:  
  enable: true  
  basic:
    enable: true  
    username: BridgeLi  
    password: BridgeLi  
  springdoc:  
    default-flat-param-object: true

最后,使用 OpenAPI3 的规范注解,注释各个 Spring 的 Rest 接口。

接口层:

import io.swagger.v3.oas.annotations.Operation;  
import io.swagger.v3.oas.annotations.tags.Tag;  
import lombok.extern.slf4j.Slf4j;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.RequestBody;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;  
import java.util.List;

@Tag(name = "案件流程 ")  
@Slf4j  
@RestController  
@RequestMapping("/ajlc")  
public class AjlcController extends BaseController {

  @Resource  
  private AjlcService ajlcService;

  @Operation(summary = "分页查询列表")  
  @GetMapping("/queryAjlcsPage")  
  public Result<TableDataInfo<Ajlc>> queryAjlcsPage(Ajlc ajlc) {  
    startPage();  
    List<Ajlc> ajlcs = ajlcService.queryAjlcs(ajlc);

    return Result.success(getDataTable(ajlcs));  
  }
}

实体类:

import io.swagger.v3.oas.annotations.media.Schema;  
import lombok.Data;

import java.io.Serializable;

/**  
 * 案件流程  
 * 表: ajlc 的 model 类  
 *  
 * @author BridgeLi  
 * @date 2024-05-25 11:23:13  
 */  
@Schema(title = "案件流程")  
@Data  
public class Ajlc implements Serializable {  
  /**  
   * 类的 serial version id  
   */  
  private static final long serialVersionUID = 1L;

  /**  
   * 字段: id,主键  
   */  
  @Schema(title = "主键")  
  private Integer id;

  /**  
   * 字段: ajlc_id,案件流程ID  
   */  
  @Schema(title = "案件流程ID")  
  private String ajlcId;  
}

最后本人也更新了 mybatis-generator-plugin 实现了对相关功能的支持,欢迎使用,具体见参考资料 2。

参考资料:

  1. https://doc.xiaominfo.com/docs/quick-start
  2. https://github.com/bridgeli/mybatis-generator-plugin