Springboot集成knife4j实现风格化API文档

2023-10-27

Springboot集成knife4j实现风格化API文档

POM引入插件

 <dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <!--在引用时请在maven中央仓库搜索最新版本号 -->
    <version>2.0.3</version>
</dependency>

配置加载

 package com.pengsn.apiserver.videoconference.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
 
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
 
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
/**
 * 配置
 */
 
@Configuration
@EnableSwagger2
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
 
    @Bean(value = "defaultApi2")
    public Docket defaultApi2() {
        Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
                .select()
                // 这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage(
                                    "com.pengsn.apiserver.videoconference.business"))
                .paths(PathSelectors.any()).build();
        return docket;
    }
 
    private ApiInfo apiInfo() {
        Contact contact = new Contact("pengsn", "", "");
        return new ApiInfoBuilder().title("视频会议接口描述").
        description("视频会议接口描述").contact(contact).version("1.0").build();
    }
}

访问地址

访问地址是:http://${host}:${port}/doc.html

界面显示

 

注解使用

  • @Api(tags="controller description"); 作用于 类

  • @ApiOperator(value="接口名称", notes="接口描述") 作用于 方法

  • @ApiOperationSupport(order=1) 排序

 

2.5 注解

swagger-annotations 库中,在 io.swagger.annotations 包路径下,提供了我们会使用到的所有 Swagger 注解。Swagger 提供的注解还是比较多的,大多数场景下,只需要使用到我们在 「2.4 UserController」 中用到的注解。

2.5.1 @Api

@Api 注解,添加在 Controller 类上,标记它作为 Swagger 文档资源。

示例如下:

// UserController.java
@RestController
@RequestMapping("/users")
@Api(tags = "用户 API 接口")
public class UserController {
    // ... 省略
}

效果如下:

@Api 注解的常用属性,如下:

  • tags

    属性:用于控制 API 所属的标签列表。

    []

    数组,可以填写多个。

    • 可以在一个 Controller 上的 @Apitags 属性,设置多个标签,那么这个 Controller 下的 API 接口,就会出现在这两个标签中。

    • 如果在多个 Controller 上的 @Apitags 属性,设置一个标签,那么这些 Controller 下的 API 接口,仅会出现在这一个标签中。

    • 本质上,tags 就是为了分组 API 接口,和 Controller 本质上是一个目的。所以绝大数场景下,我们只会给一个 Controller 一个唯一的标签。例如说,UserController 的 tags 设置为 "用户 API 接口"

@Api 注解的不常用属性,如下:

  • produces 属性:请求请求头的可接受类型( Accept )。如果有多个,使用 , 分隔。

  • consumes 属性:请求请求头的提交内容类型( Content-Type )。如果有多个,使用 , 分隔。

  • protocols 属性:协议,可选值为 "http""https""ws""wss" 。如果有多个,使用 , 分隔。

  • authorizations 属性:授权相关的配置,[] 数组,使用 @Authorization 注解。

  • hidden 属性:是否隐藏,不再 API 接口文档中显示。

@Api 注解的废弃属性,不建议使用,有 valuedescriptionbasePathposition

2.5.2 @ApiOperation

@ApiOperation 注解,添加在 Controller 方法上,标记它是一个 API 操作。

示例如下:

// UserController.java
@GetMapping("/list")
@ApiOperation(value = "查询用户列表", notes = "目前仅仅是作为测试,所以返回用户全列表")
public List<UserVO> list() {
    // 查询列表
    List<UserVO> result = new ArrayList<>();
    result.add(new UserVO().setId(1).setUsername("yudaoyuanma"));
    result.add(new UserVO().setId(2).setUsername("woshiyutou"));
    result.add(new UserVO().setId(3).setUsername("chifanshuijiao"));
    // 返回列表
    return result;
}

效果如下:

@ApiOperation 注解的常用属性,如下:

  • value 属性:API 操作名。

  • notes 属性:API 操作的描述。

@ApiOperation 注解的不常用属性,如下:

  • tags 属性:和 @API 注解的 tags 属性一致。

  • nickname 属性:API 操作接口的唯一标识,主要用于和第三方工具做对接。

  • httpMethod 属性:请求方法,可选值为 GETHEADPOSTPUTDELETEOPTIONSPATCH 。因为 Swagger 会解析 SpringMVC 的注解,所以一般无需填写。

  • produces 属性:和 @API 注解的 produces 属性一致。

  • consumes 属性:和 @API 注解的 consumes 属性一致。

  • protocols 属性:和 @API 注解的 protocols 属性一致。

  • authorizations 属性:和 @API 注解的 authorizations 属性一致。

  • hidden 属性:和 @API 注解的 hidden 属性一致。

  • response 属性:响应结果类型。因为 Swagger 会解析方法的返回类型,所以一般无需填写。

  • responseContainer 属性:响应结果的容器,可选值为 ListSetMap

  • responseReference 属性:指定对响应类型的引用。这个引用可以是本地,也可以是远程。并且,当设置了它时,会覆盖 response 属性。说人话,就是可以忽略这个属性,哈哈哈。

  • responseHeaders 属性:响应头,[] 数组,使用 @ResponseHeader 注解。

  • code 属性:响应状态码,默认为 200 。

  • extensions 属性:拓展属性,[] 属性,使用 @Extension 注解。

  • ignoreJsonView 属性:在解析操作和类型,忽略 JsonView 注释。主要是为了向后兼容。

@ApiOperation 注解的废弃属性,不建议使用,有 position

2.5.3 @ApiImplicitParam

@ApiImplicitParam 注解,添加在 Controller 方法上,声明每个请求参数的信息。

示例如下:

// UserController.java
​
@PostMapping("/delete")
@ApiOperation(value = "删除指定用户编号的用户")
@ApiImplicitParam(name = "id", value = "用户编号", paramType = "query", dataTypeClass = Integer.class, required = true, example = "1024")
public Boolean delete(@RequestParam("id") Integer id) {
    // 删除用户记录
    Boolean success = false;
    // 返回是否更新成功
    return success;
}

效果如下:@ApiImplicitParam 示例

@ApiImplicitParam 注解的常用属性,如下:

  • name 属性:参数名。

  • value 属性:参数的简要说明。

  • required 属性:是否为必传参数。默认为 false

  • dataType 属性:数据类型,通过字符串 String 定义。

  • dataTypeClass 属性:数据类型,通过 dataTypeClass 定义。在设置了 dataTypeClass 属性的情况下,会覆盖 dataType 属性。推荐采用这个方式

  • paramType

    属性:参数所在位置的类型。有如下 5 种方式:

    • "path" 值:对应 SpringMVC 的 @PathVariable 注解。

    • 默认值"query" 值:对应 SpringMVC 的 @PathVariable 注解。

    • "body" 值:对应 SpringMVC 的 @RequestBody 注解。

    • "header" 值:对应 SpringMVC 的 @RequestHeader 注解。

    • "form" 值:Form 表单提交,对应 SpringMVC 的 @PathVariable 注解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot集成knife4j实现风格化API文档 的相关文章

随机推荐

  • 夜神安卓7.1.2安装xposed踩坑(Could not load available ZIP files.Pull down to try again)

    详情见我的博客小生博客 报错如图 1 通用制作xposed目录解决办法 夜神模拟器见第二点 1 1下载xposed https dl xda xposed info framework 下载对应的sdk 模拟器要下载x86的 我是安卓7 1
  • 2022百度之星初赛总结(非题解)

    完了玩废了 0题罚坐 下来看题解 是有简单题 完全完全能做的 大一这都没罚坐 悲 ccpc预选赛开始了 希望队友健在 T1 从dij到bf到fl 判定条件是等于 与公开ac是惊人的像 但样例都没调出来 T2 题目k 1 k n理解为n 1到
  • 晶体管 放大电路的 分析

    三极管共集电极放大电路和共基极放大电路详解 https wenku baidu com view 036f033a31b765ce050814c4 html 共集电极放大电路 https wenku baidu com view 204a7
  • RDS MySQL空间优化最佳实践

    简介 在前三期介绍了RDS for MySQL参数优化 锁问题以及延迟优化最佳实践之后 本期将介绍存储空间相关的最佳实践 存储空间是RDS很重要的一个指标 在RDS的工单问题中 空间问题的咨询可以排在top 5 当RDS的实际使用空间超过了
  • android手机销售app(IDEA,SpringBoot,SSM,MySQL)+支付宝支付+全套视频教程

    本项目亮点 支付宝支付 eCharts柱状图图表数据统计 项目功能介绍 本系统包含后台管理和前端app双端系统 后台管理的功能包含 登录 退出 修改管理员信息 基本信息与头像 资源管理 角色管理 资源权限分配 字典管理 用户管理 图书管理
  • Matlab学习4-图像处理之图像加法、图像减法、加噪

    图像处理 图像加法 例图像的叠加 调亮色等 图像减法 例捕捉运动图像的轨迹 环境matlab2020 使用imadd 加 imsubtract 减 imresize 改 imnoise 图像加噪 matlab函数 imadd X Y 将两个
  • 农业温室大棚养殖系统智能监控方案

    温室大棚农作物的种植给人们的生活带来极大的便利 并得到了迅速的推广和应用 在不适宜植物生长的季节 为保证作物温室生育期和作物产量 实时地收集温度 湿度 光照 气体浓度以及土壤水分等信息并汇总物通博联智能网关上传到物通博联云 为了给农作物创造
  • WebSocket 协议使用

    WebSocket 协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信 用于这个的安全模型是通 常由 web 浏览器使用的基于来源的安全模型 该协议包括一个打开阶段握手 接着是基本消息帧
  • 数据分析之数据预处理、分析建模、可视化

    大纲 思维导图 1 数据分析概述 1 1 简介 1 2 发展历程 1 3 应用领域 1 4 开发流程 2 数据类型 2 1 结构化与非结构化数据 2 2 定性与定量数据 2 3 截面数据与时间序列数据 3 数据来源 4 数据预处理方法 4
  • 初始vue(二)

    vue详细学习 二 class的操作 div class play judge data judge true div data msg div 1212323 div data msg div 1212323 div 不能解析 的内容 d
  • 【深度学习】Pytorch 系列教程(一):PyTorch数据结构:1、Tensor(张量):维度(Dimensions)、数据类型(Data Types)

    目录 一 前言 二 实验环境 三 PyTorch数据结构 0 分类 1 Tensor 张量 1 维度 Dimensions 0维 标量 1维 向量 2维 矩阵 3维张量 2 数据类型 Data Types 一 前言 ChatGPT PyTo
  • linux中gvim配置

    文章目录 前言 一 在哪配置 二 设置语句 三 运行结果 前言 对于在linux上工作的硬件工程师来说 换到一个新的服务器或者工作环境 首先要做的几件事中肯定有一项是设置gvim配置 这里纪录下我的常用gvim配置和注释 仅供参考 如有错误
  • mysql TRUNCATE delete

    mysql truncate 和delete 都用与删除数据表里的数据 truncate命令则是直接将全表的数据清空掉 delete命令可以不带where 可以达到同样的目的 delete通过where带上条件删除部分数据 从这可以看出de
  • Nginx_http_upstream_check_module应用

    ngx http upstream check module 该模块可以为Nginx提供主动式后端服务器健康检查的功能 该模块在Nginx 1 4 0版本以前没有默认开启 它可以在配置编译选项的时候开启 configure with htt
  • C++的特性(封装、继承、多态、抽象)的详解

    封装 封装目的 模块化 信息隐藏 封装 隐藏对象的属性和实现细节 仅对外公开接口和对象进行交互 将数据和操作数据的方法进行有机结合 是通过特性和行为的组合来创建新数据类型让接口与具体实现相隔离 C 中是通过类来实现的 为了尽量避免某个模块的
  • MIPI I3C简介

    前面的文章介绍过MIPI联盟发布的MIPI CSI DSI D PHY等接口 这一篇文章来简单聊一聊I3C 同样由MIPI联盟制定 主要用于替代传统的USRT I2C和SPI 并向下兼容I2C 由于已经有网友写过相关的文章 并且写的很不错
  • signature=462fd3702561f02c1dc8858a887d01f8,baly-20201118

    0001747079 20 000139 txt 20201119 0001747079 20 000139 hdr sgml 20201119 20201119073031 ACCESSION NUMBER 0001747079 20 0
  • EF(Entity Framework)通用DBHelper通用类,增删改查以及列表

    其中 通用类名 DBhelper 实体类 UserInfo 1 新增 2 DBHelper
  • wedo巡线机器人编程教程_这是一个机器人和编程的时代

    图中在草地上自在奔跑的机器人是波士顿动力公司 BostonDynamics 开发的类人双足机器人Atlas 由麻省理工 MIT 电子工程与计算机科学系的教授马克 雷波特在1992年创立 一直致力于将机器人变成自然界的一个新物种 经过20多年
  • Springboot集成knife4j实现风格化API文档

    Springboot集成knife4j实现风格化API文档 POM引入插件