给Swagger换个皮肤,整合Knife4j文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给Swagger换个皮肤,整合Knife4j文档相关的知识,希望对你有一定的参考价值。

(目录)


前言

API 文档对接是前后端分离时代必不可少的一个环节,为了极大的提升效率,一个简洁、易用且美观的文档至关重要。最初,API 文档是一个纯手工编写的 Word。但是,程序猿是一群极具追求自动化高效率的人。于是,随着代码而启动的全自动化在线文档诞生了,其中最具代表性的当属 swagger。swagger 虽高效,但也有不足。knife4j 对 swagger 进行了封装,弥补了其中的不足,包括但不限于参数忽略,离线( md、html、doc、json )文档等等。可以说是满足并超出了一个 API 文档应有的自我修养。

关于 knife4j

knife4j 官网:

有两个大版本 3.X 和 2.X ,官方解释如下

界面赏析


动手实践

示例版本

工具 版本
SpringBoot 2.3.0.RELEASE
knife4j 3.0.2
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.2</version>
</dependency>

如果你用过或正在使用 swagger 作为你的 API 文档,对这些代码应该不会陌生,因为它们并没有任何分别。

@Configuration
public class SwaggerConfig 

    @Bean
    public Docket docket() 
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                // 控制层包名,会自动扫描包里的所有接口
                .apis(RequestHandlerSelectors.basePackage("org.programlife2016.knife4j.web"))
                .paths(PathSelectors.any())
                .build();
    

    private ApiInfo apiInfo() 
        // 展示在主页的信息
        return new ApiInfoBuilder()
                // 文档标题
                .title("knife4j")
                // 文档描述
                .description("knife4j示例文档")
                // 你的联系方式
                .contact(new Contact("ProgramLife2016", "xxx", "xxx"))
                // 文档版本
                .version("1.0")
                .build();
    



@Getter
@Setter
@ToString
public class UserModel 

    @ApiModelProperty("主键")
    private Integer id;

    @ApiModelProperty("名称")
    private String name;

    @ApiModelProperty("年龄")
    private Integer age;



可以看到这里使用 @ApiModelProperty 注解替代了传统的 Java 注释knife4j 会读取注解的值来作为参数的说明展示在文档上,对接者就可以清晰明了字段代表的属性

@Api(tags = "用户模块")
@RestController
@RequestMapping("/user")
public class UserController 

    @Autowired
    private UserService userService;

    @ApiOperation("添加")
    @PostMapping("/add")
    public CommonResult<UserModel> add(@RequestBody UserModel userModel) 
        userService.add(userModel);
        return CommonResult.success();
    

    @ApiOperation("更新")
    @PutMapping("/update")
    public CommonResult<UserModel> update(@RequestBody UserModel userModel) 
        userService.update(userModel);
        return CommonResult.success();
    



这里使用到了两个注解 @Api 和 @ApiOperation。


访问 knife4j 查看与调试接口

启动 SpringBoot 服务后浏览器访问 knife4j 就能看到‘界面赏析’中的效果图,地址为

knife4j 常用特性

knife4j 在 swagger 的基础上做了许多增强,这里介绍几个最常用的。

使用增强特性需在 application.yml 中开启

knife4j:
  enable: true

过滤请求参数

在增改接口中,有时我们为了方便(其实就是懒),会用同一个 model,但在新增接口中是不需要传递id的,修改接口中又是必传的,在 API 文档新增接口如果展示了这个字段就会莫名其妙,这时,过滤请求参数就显得尤为重要。在 knife4j 中,只需一个 @ApiOperationSupport 注解即可搞定。

@ApiOperation("添加")
@ApiOperationSupport(ignoreParameters = "id")
@PostMapping("/add")
public CommonResult<UserModel> add(@RequestBody UserModel userModel) 
    userService.add(userModel);
    return CommonResult.success();

全局参数

前后端分离开发中一般使用 token 作为请求参数进行身份与权限鉴定,有放在 query(表单)和 header(请求头)的,knife4j 对这两种都进行了支持,只需在侧边栏‘文档管理 -> 全局参数设置’中设置。

离线文档

有时我们需要一份离线文档可以随时随地进行查看,knife4j 支持导出四种格式( md、html、doc 、json)的离线文档,在侧边栏‘文档管理 -> 离线文档’中导出。


以上是关于给Swagger换个皮肤,整合Knife4j文档的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合swagger2+knife4j

Springboot 整合 knife4j | Swagger文档最简单配置

springboot整合swagger(Knife4j)(漫画)

Springboot整合springfox3+knife4j,生成接口文档

再见 Swagger UI!国人开源了一款超好用的 API 文档生成框架,Star 4.7K+,真香!!

SpringBoot2.x集成knife4j