Knife4j_接口概述、常用注解详解、搭建swagger项目、功能概述

news2024/11/25 4:45:59

文章目录

  • ①. knife4j的概述
  • ②. knife4j核心功能
  • ③. 从0开始搭建knife4j项目
  • ④. 常用注解 - Api
  • ④. @ApiOperation注解
  • ⑤. @ApiModelProperty注解
  • ⑥. @ApiImplicitParam注解
  • ⑦. @ApiImplicitParams注解
  • ⑧. 限制请求方式
  • ⑨. 导出离线API文档

①. knife4j的概述

  • ①. knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!

  • ②. 官方文档地址

  • ③. http://ip:port/doc.html

在这里插入图片描述

②. knife4j核心功能

  • ①. 文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。

  • ②. 在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。

  • ③. 个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息

  • ④. 离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件

  • ⑤. 接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接

③. 从0开始搭建knife4j项目

  • ①. pom文件引入
<properties>
    <knife4j.version>2.0.9</knife4j.version>
    <lombok.version>1.18.12</lombok.version>
</properties>
 <dependencies>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>${knife4j.version}</version>
        </dependency>
        <!--web场景-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.80</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
  • ②. 配置类 - SwaggerConfig
@Configuration
@EnableSwagger2WebMvc
// @ConditionalOnExpression(value = "'develop'.equals('${spring.cloud.nacos.config.namespace}') or 'testing'.equals('${spring.cloud.nacos.config.namespace}')")
public class SwaggerConfig {
    @Bean(value = "swaggerBean")
    public Docket swaggerBean() {
        //指定使用Swagger2规范
        List<Parameter> pars = new ArrayList<>();
        //暂无需token校验
        //pars.add(new ParameterBuilder().name("token").description("认证token").modelRef(new ModelRef("string")).parameterType("header").build());
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .title("swagger测试查询")
                        //描述字段支持Markdown语法
                        .description("swagger测试查询系统")
                        .contact(new Contact("tangzhi", "", "845195485@qq.com"))
                        .version("1.0")
                        .build())
                //分组名称
                .groupName("ssm-test-inquire")
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.xiaozhi.swagger"))
                .paths(PathSelectors.any())
                .build().globalOperationParameters(pars);
    }
}
  • ③. 测试 - http://ip:port/doc.html
    在这里插入图片描述

④. 常用注解 - Api

  • ①. @Api注解用于标注一个ControllerClass)在默认情况下,Swagger-Core只会扫描解析具有@Api注解的类,而会自动忽略其他类别资源JAX-RS endpoints,Servlets等等的注解
属性解释
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
valueurl的路径值
basePath基本路径可以不配置
position如果配置多个Api想改变显示的顺序位置
producesFor example, “application/json, application/xml”
consumesFor example, “application/json, application/xml”
protocolsPossible values: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true将在文档中隐藏
@Controller
@Slf4j
@RequestMapping("/xxx")
@Api(tags = "人员信息API", description = "提供人员信息相关的Rest API")
public class XxxController{
 
}
  • ②. 案例演示 - 建议在配置的tags属性值上添加序号,例如:“01. 用户模块”、“02. 微博模块”,则框架会根据值进行排序
// 1. UserController
@Api(tags = "01.用户管理模块")
public class UserController {...}

// 2. WeiboController
@Api(tags = "02.微博管理模块")
public class WeiboController {...}

// 3. CommentController
@Api(tags = "03.评论管理模块")
public class CommentController {...}

在这里插入图片描述

④. @ApiOperation注解

  • ①. @ApiOperation注解在用于对一个操作或HTTP方法进行描述。具有相同路径的不同操作会被归组为同一个操作对象。不同的HTTP请求方法及路径组合构成一个唯一操作
属性解释
valueurl的路径值
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
basePath基本路径可以不配置
position如果配置多个Api 想改变显示的顺序位置
producesFor example, “application/json, application/xml”
consumesFor example, “application/json, application/xml”
protocolsPossible values: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true将在文档中隐藏
response返回的对象
responseContainer这些对象是有效的 “List”, “Set” or “Map”.,其他无效
httpMethod“GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH”
  • ②. 此处以注册功能为例,其他所有方法请添加说明
/**注册功能*/
@RequestMapping("reg")
@ApiOperation(value = "注册功能")
public int reg(@RequestBody UserRegDTO userRegDTO){...}

在这里插入图片描述

⑤. @ApiModelProperty注解

  • ①. 添加在POJO类的属性上的注解,用于对请求参数或响应结果中的某个属性进行说明,主要通过其value属性配置描述文本,并可通过example属性配置示例值

  • ②. 参数说明

  1. value属性:配置参数名称
  2. required属性:配置是否必须提交此请求参数
  3. example属性:配置示例值
    注意:如果配置了 required=true,只是一种显示效果,Knife4j框架并不具备检查功能
  • ③. 案例演示
@Data
public class UserRegDTO {
    @ApiModelProperty(value = "用户名", required = true, example = "赵丽颖")
    private String username;
    @ApiModelProperty(value = "密码", required = true)
    private String password;
    @ApiModelProperty(value = "昵称", required = true)
    private String nickname;
}

在这里插入图片描述

⑥. @ApiImplicitParam注解

  • ①. 添加在控制器类中处理请求的方法上的注解,主要用于配置非封装(非XxxDTO/XxxParam的参数)的参数

  • ②. 参数说明

  1. name:指定参数名称参数变量名
  2. value:配置参数名称
  3. dataType:配置数据类型
  4. required:配置是否必须提交此请求参数
  5. example:配置参数的示例值
    注意:一旦使用此注解,各个参数的数据类型默认都会显示String,可以通过dataType指定数据类型
  • ③. 案例演示
@ApiImplicitParam(name = "id", value = "微博", required=true, dataType = "int")
public WeiboDetailVO selectById(int id){...}

在这里插入图片描述

⑦. @ApiImplicitParams注解

  • ①. 添加在控制器类中处理请求的方法上的注解,当方法有多个非封装的参数时,在方法上添加此注解,并在注解内部通过@ApiImplicitParam数组配置多个参数

  • ②. 此处以微博详情功能为例

/**微博详情页功能*/
@GetMapping("selectById")
@ApiOperation(value = "微博详情功能")
@ApiImplicitParams(value = {
    @ApiImplicitParam(name = "id", value = "微博", required=true, dataType = "int"),
    @ApiImplicitParam(name = "username", value = "用户名", required=true)
})
// 额外增加username参数,仅仅用于测试
public WeiboDetailVO selectById(int id, String username){
    return weiboMapper.selectById(id);
}

在这里插入图片描述

⑧. 限制请求方式

  • ①. API文档中默认每个功能会展示7种请求方式,遵循RESTful规则将 @RequestMapping 注解修改为对应请求方法的注解,比如:@GetMapping @PostMapping @PutMapping @DeleteMapping 注解,重启工程后刷新测试
    在这里插入图片描述

⑨. 导出离线API文档

  • 文档管理 - 离线文档 中存在多种格式的导出格式
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1067329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#上位机——根据命令发送

C#上位机——根据命令发送 第一步&#xff1a;设置窗口的布局 第二步&#xff1a;设置各个属性 第三步&#xff1a;编写各个模块之间的关系

【力扣】单调栈:901. 股票价格跨度

【力扣】单调栈&#xff1a;901. 股票价格跨度 文章目录 【力扣】单调栈&#xff1a;901. 股票价格跨度1. 题目介绍2. 思路3. 解题代码参考 1. 题目介绍 设计一个算法收集某些股票的每日报价&#xff0c;并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格…

文献综述|CV领域神经网络水印发展综述

前言&#xff1a;最近接触了「模型水印」这一研究领域&#xff0c;阅读几篇综述之后&#xff0c;大致了解了本领域的研究现状&#xff0c;本文就来总结一下该领域的一些基础知识&#xff0c;以飨读者。 ⚠️注&#xff1a;本文中出现的研究工作均基于计算机视觉任务开展&#x…

Git 学习笔记 | 安装 Git 及环境配置

Git 学习笔记 | 安装 Git 及环境配置 Git 学习笔记 | 安装 Git 及环境配置安装 Git配置 Git查看配置 Git 学习笔记 | 安装 Git 及环境配置 安装 Git 官方网站&#xff1a;https://git-scm.com/ 官网下载太慢&#xff0c;我们可以使用淘宝镜像下载&#xff1a;https://regist…

自学接口测试系列 —— 自动化测试用例设计基础!

一、接口测试思路总结 ❓首先我们在进行接口测试设计前思考一个问题&#xff1a;接口测试&#xff0c;测试的是什么&#xff1f; ❗我们必须要知道&#xff0c;接口测试的本质&#xff1a;是根据接口的参数&#xff0c;设计输入数据&#xff0c;验证接口的返回值。 那么接口…

Fast DDS之Transport

目录 transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP&#xff0c;TCP&#xff0c;SHM。

Python——— 模块

&#xff08;一&#xff09;模块化(module)程序设计理念 模块和包概念的进化史 模块和包概念的进化史 ① Python程序由模块组成。一个模块对应 python 源文件&#xff0c;一般后缀名是&#xff1a; .py ② 模块由语句组成。运行Python 程序时&#xff0c;按照模块中语句的顺…

手把手教你编写LoadRunner脚本

编写 LoadRunner 脚本需要熟悉脚本语言、业务场景、参数化技术、断言和事务等基础知识。 在实际编写时&#xff0c;可以根据具体测试需求&#xff0c;结合实际情况进行合理的配置和调整。 基本步骤 创建脚本 在 LoadRunner 的 Controller 模块中&#xff0c;创建一个新的测试…

详解TCP三次握手(建立连接)和四次握手(释放连接)

TCP是是一个面向连接的协议&#xff0c;无论哪一方发送数据之前&#xff0c;都必须在双方之间建立一条连接。 一、建立连接 建立TCP连接时&#xff0c;要经历这样的流程&#xff1a; ① 请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口&#xff0c;以及初始…

基于微信小程序的个人健康数据管理平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

Unity可视化Shader工具ASE介绍——2、ASE的Shader创建和输入输出

大家好&#xff0c;我是阿赵&#xff0c;这里继续介绍Unity可视化写Shader的ASE插件的用法。上一篇介绍了ASE的安装和编辑器界面分布&#xff0c;这一篇主要是通过一个简单的例子介绍shader的创建和输入输出。 一、ASE的Shader创建 这里先选择Surface类型的Shader&#xff0c;…

Git 学习笔记 | 版本控制和版本控制工具

Git 学习笔记 | 版本控制和版本控制工具 Git 学习笔记 | 版本控制和版本控制工具什么是版本控制&#xff1f;版本管理工具的特性版本管理工具的发展简史主流的版本控制器本地版本控制集中版本控制分布式版本控制 Git与SVN的主要区别 Git 学习笔记 | 版本控制和版本控制工具 学…

孕期能吃韭黄吗?坐月子和哺乳期能吃韭黄吗?宝宝能不能吃韭黄?

韭黄又称韭芽、黄韭、韭菜白。韭菜隔绝光线&#xff0c;完全在黑暗中生长&#xff0c;因无阳光供给&#xff0c;不能进行光合作用&#xff0c;合成叶绿素&#xff0c;就会变成黄色&#xff0c;称之为「韭黄」。 孕期能吃吗&#xff1f; 能吃 韭黄味道独特&#xff0c;富含膳…

[Python入门教程]01 Python开发环境搭建

Python开发环境搭建 本文介绍python开发环境的安装&#xff0c;使用anaconda做环境管理&#xff0c;VS code写代码。搭建开发环境是学习的第一步&#xff0c;本文将详细介绍anaconda和vs code的安装过程&#xff0c;并测试安装结果。 视频教程链接&#xff1a;https://www.bil…

【ElasticSearch】深入了解 ElasticSearch:开源搜索引擎的力量

文章目录 前言一、初识 ElasticSearch 搜索引擎1.1 ElasticSearch 的核心概念1.2 ElasticSearch 的演进历程1.3 ElasticSearch 的优势与未来 二、正排索引与倒排索引&#xff1a;数据库与 ElasticSearch 的差异2.1 对正排索引的认识2.2 对倒排索引的认识2.3 正排索引 vs. 倒排索…

强迫症福音!一个小技巧,让DALLE-3创作排列美学

夕小瑶科技说 原创 编译 | 奶茶子 最近在Twitter上有一条备受欢迎的推文&#xff0c;其介绍了一个令人印象深刻的DALL-E应用。该推文中写道&#xff1a;“你可以使用DALL-E 3来制作一些令人惊叹的整齐排列风格的Knolling照片。”作者(chaseleantj)还分享了他所生成的Knolling…

【Golang】DFA算法过滤敏感词Golang实现

什么是DFA算法 DFA全称&#xff1a;Deterministic Finite Automaton&#xff0c;翻译过来就是确定性有限自动机&#xff0c;其特征是&#xff0c;有一个有限状态集合和一些从一个状态通向另一个状态的边&#xff0c;每条边上标记有一个符号&#xff0c;其中一个状态是初态&…

java 常见api Arrays类

int类型数组 package daysreplace;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arrays{38,24,42,56,22,44};//直接输出数组名称就是内存地址System.out.println(arrays);//Arrays.toString()会将数组内容转成字符串形式System…

6款好用良心的国产软件,每一款都是精品,电脑秒变黑科技

在如今科技发展迅猛的时代&#xff0c;我们在工作中基本都会使用到电脑&#xff0c;其实电脑上有很多非常实用的软件&#xff0c;能够提高我们的工作效率。今天给大家分享6款良心好用的国产软件&#xff0c;每一款都是精品&#xff0c;让你电脑秒变黑科技。 01、滴答清单 滴答清…

mac文件为什么不能拖进U盘?

对于Mac用户来说&#xff0c;可能会遭遇一些烦恼&#xff0c;比如在试图将文件从Mac电脑拖入U盘时&#xff0c;却发现文件无法成功传输。这无疑给用户带来了很大的不便。那么&#xff0c;mac文件为什么不能拖进U盘&#xff0c;看完这篇你就知道了。 一、U盘的读写权限问题 如果…