说说Knife4j

news2024/11/28 6:32:47

Knife4j是一款基于Swagger2的在线API文档框架

使用Knife4j, 需要

· 添加Knife4j的依赖

当前建议使用的Knife4j版本, 只适用于Spring Boot2.6以下版本, 不含Spring Boot2.6

· 在主配置文件(application.yml)中开启Knife4j的增强模式

必须在主配置文件中进行配置, 不要配置在个性化配置文件中

· 添加Knife4j的配置类, 进行必要的配置

必须指定控制器的包

关于依赖项的代码:

<!-- Knife4j Spring Boot:在线API -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>2.0.9</version>
</dependency>

在application.yml中添加配置:

knife4j:
    enable: true

在根包下创建config.Knife4jConfiguration配置类:

package cn.tedu.csmall.passport.config;

import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.EnableSwagger2WebMvc;

/**
 * Knife4j配置类
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Slf4j
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {

    /**
     * 【重要】指定Controller包路径
     */
    private String basePackage = "cn.tedu.csmall.passport.controller";
    /**
     * 分组名称
     */
    private String groupName = "passport";
    /**
     * 主机名
     */
    private String host = "http://java.tedu.cn";
    /**
     * 标题
     */
    private String title = "酷鲨商城在线API文档--管理员管理";
    /**
     * 简介
     */
    private String description = "酷鲨商城在线API文档--管理员管理";
    /**
     * 服务条款URL
     */
    private String termsOfServiceUrl = "http://www.apache.org/licenses/LICENSE-2.0";
    /**
     * 联系人
     */
    private String contactName = "Java教学研发部";
    /**
     * 联系网址
     */
    private String contactUrl = "http://java.tedu.cn";
    /**
     * 联系邮箱
     */
    private String contactEmail = "java@tedu.cn";
    /**
     * 版本号
     */
    private String version = "1.0.0";

    @Autowired
    private OpenApiExtensionResolver openApiExtensionResolver;

    public Knife4jConfiguration() {
        log.debug("加载配置类:Knife4jConfiguration");
    }

    @Bean
    public Docket docket() {
        String groupName = "1.0.0";
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .host(host)
                .apiInfo(apiInfo())
                .groupName(groupName)
                .select()
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                .paths(PathSelectors.any())
                .build()
                .extensions(openApiExtensionResolver.buildExtensions(groupName));
        return docket;
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(title)
                .description(description)
                .termsOfServiceUrl(termsOfServiceUrl)
                .contact(new Contact(contactName, contactUrl, contactEmail))
                .version(version)
                .build();
    }

}

完成后, 启动项目, 通过 http://localhost:9081/doc.html 即可访问在线API文档!

关于Knife4j的在线API文档, 可以通过一系列注解来配置此文件的显示:

  • @Api:添加在控制器类上,通过此注解的tags属性,可以指定模块名称,并且,在指定名称时,建议在名称前添加数字作为序号,Knife4j会根据这些数字将各模块升序排列,例如:

@Api(tags = "01. 管理员管理模块")
  • @ApiOpearation:添加在控制器类中处理请求的方法上,通过此注解的value属性,可以指定业务/请求资源的名称,例如:

@ApiOperation("添加管理员")
  • @ApiOperationSupport:添加在控制器类中处理请求的方法上,通过此注解的order属性(int),可以指定排序序号,Knife4j会根据这些数字将各业务/请求资源升序排列,例如:

@ApiOperationSupport(order = 100)

关于@RequestBody

在Spring MVC框架中,在处理请求的方法的参数前:

  • 当添加了@RequestBody注解,则客户端提交的请求参数必须是对象格式的,例如:

{"name": "小米11的相册","description": "小米11的相册的简介","sort": 88}

如果客户端提交的数据不是对象,而是FormData格式的,在接收到请求时将报错:

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
  • 当没有添加@RequestBody注解,则客户端提交的请求参数必须是FormData格式的,例如:

name=小米11的相册&description=小米11的相册的简介&sort=88

如果客户端提交的数据不是FormData格式的,而是对象,则无法接收到参数(不会报错,控制器中各参数值为null)

另外,Knife4j框架的调试界面中,如果是对象格式的参数(使用了@RequestBody),将不会显示各请求参数的输入框,而是提供一个JSON字符串供编辑,如果是FormData格式的参数(没有使用@RequestBody),则会显示各请求参数对应的输入框。

通常,更建议使用FormData格式的请求参数!则在控制器处理请求的方法的参数上不需要添加@RequestBody注解!

在Vue脚手架项目中,为了更便捷的使用FormData格式的请求参数,可以在项目中使用qs框架,此框架的工具可以轻松的将JavaScript对象转换成FormData格式!

则在前端的Vue脚手架项目中,先安装qs:

npm i qs -S

然后,在main.js中添加配置:

import qs from 'qs';Vue.prototype.qs = qs;

最后,在提交请求之前,可以将对象转换成FormData格式,例如:

let formData = this.qs.stringify(this.ruleForm);console.log('formData:' + formData);

如果处理请求时,参数是封装的POJO类型,需要对各请求参数进行说明时,应该在此POJO类型的各属性上使用@ApiModelProperty注解进行配置,通过此注解的value属性配置请求参数的名称,通过requeired属性配置是否必须提交此请求参数(并不具备检查功能),例如:

需要注意,@ApiModelProperty还可以用于配置响应时的各数据!

对于处理请求的方法的参数列表中那些未封装的参数(例如String、Long),需要在处理请求的方法上使用@ApiImplicitParam注解来配置参数的说明,并且,必须配置name属性,此属性的值就是方法的参数名称,使得此注解的配置与参数对应上,然后,再通过value属性对参数进行说明,还要注意,此属性的required属性表示是否必须提交此参数,默认为false,即使是用于配置路径上的占位符参数,一旦使用此注解,required默认也会是false,则需要显式的配置为true,另外,还可以通过dataType配置参数的数据类型,如果未配置此属性,在API文档中默认显示为string,可以按需修改为int、long等。例如:

如果处理请求的方法上有多个未封装的参数,则需要使用多个@ApiImplicitParam注解进行配置,并且,这多个@ApiImplicitParam注解需要作为@ApiImplicitParams注解的参数,例如:

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

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

相关文章

Java 代理模式详解

1、代理模式 代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问&#xff0c;这样就可以在不修改原目标对象的前提下&#xff0c;提供额外的功能操作&#xff0c;扩展目标对象的功能。 代理模式的主要作用是扩展目标对象…

C++——运算符重载

1、运算符重载的概念 运算符重载&#xff0c;就是对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型。运算符重载的目的是让语法更加简洁运算符重载不能改变本来寓意&#xff0c;不能改变基础类型寓意运算符重载的本质是另一种函数调用…

【半监督医学图像分割 2021 TMI】SimCVD 论文翻译

文章目录【半监督医学图像分割 2021 TMI】SimCVD 论文翻译摘要1. 介绍2. 相关工作3. 方法3.1 总览3.2 任务制定3.3 基础体系结构3.4 边缘对比蒸馏4. 实验4.1 数据集和预处理4.2 实现细节5. 结论5.1 实验&#xff1a;LA5.2 实验&#xff1a;Pancreas6. 消融研究6.1 边界感知对比…

嵌入式ARM工业边缘计算机BL302的CAN总线接口如何设置?

CAN 接口如图所示&#xff0c;输入如下命令&#xff1a; ifconfig -a //查看所有网卡 如果 FlexCAN 驱动工作正常的话就会看到 CAN 对应的网卡接口&#xff0c;如图。从图中可 以看出&#xff0c;有一个名为“can0”的网卡&#xff0c;这个就是 BL302 板上的 CAN1 接口对应的 c…

借助亚马逊云科技,Early Data完成数据云上安家、实现降本增效

数字经济时代&#xff0c;伴随着大数据应用的不断深入&#xff0c;企业对用户及市场发展动向的判断正变得愈加精准。数据资产不再是虚无缥缈的东西&#xff0c;而是可以帮助企业切切实实找到业务增长点&#xff0c;洞悉潜在商机&#xff0c;拥有巨大潜力的“宝藏”。IDC数据显示…

【 mybatis的工作流程】

目录一.mybatis执行流程二.使用工具类简化项目&#xff08;反射的体现&#xff09;2.1 Sqlsession工厂对像2.2 工具类&#xff08;可直接放在工具类使用&#xff09;一.mybatis执行流程 1.1 读取主配置文件mybatis-config.xml&#xff0c;获得运行环境和数据库连接。 1.2 加载映…

对象之间的关系

目录1. 依赖2. 关联3. 聚合4. 组合Java的对象/类之间有四种关系&#xff1a;依赖、关联、组合、聚合。 1. 依赖 依赖&#xff08;Dependency&#xff09;&#xff1a; 一个对象的功能依赖于另一个对象。 类比&#xff1a;人类生存依赖食物和空气 体现&#xff1a;被依赖者体…

Ethercat系列(5)TWcat3激活过程的协议分析(续1)

顺序写系统时间偏移从-》主顺序写时间延迟主-》从从-》主顺序写分布式时钟启动主-》从从-》主读多重写系统时间主-》从从-》主顺序写应用层控制主-》从从-》主顺序读错误计数器主-》从从-》主顺序读应用层状态主-》从从-》主顺序读应用层&#xff0c;广播写错误计数器主-》从从…

2023 年首轮土地销售活动来了 与 The Sandbox 一起体验「体素狂热」!

2 月 14 日晚上 11 点&#xff0c;开始你的体素冒险。 The Sandbox 很高兴推出 2023 年的第一次土地销售活动。欢迎来到「体素狂热 (Voxel Madness)」&#xff01; 简要概括 土地销售抽奖活动将于北京时间 2 月 14 日星期二晚上 11 点开始 「体素狂热」 土地销售活动将于 2 月…

企业公众号菜单添加视频的完整教程(组图)

公众号实用教程&#xff0c;公众号运营教程。 有公众号的朋友&#xff0c;看过来&#xff0c;今天来教教大家&#xff0c;在企业微信公众号中如何调用视频列表。先上一个效果吧&#xff1a; 最终效果的截图 -关注酷播公众号&#xff0c;查看实际的应用效果&#xff08;在本公众…

【shell 编程大全】脚本交互 以及表达式

脚本交互 以及表达式 1. 概述 嗨&#xff0c;我又来继续分享了。今天分享的内容是脚本交互&#xff0c;再开始接下来的分享开始之前&#xff0c;让我们来回顾下上一次(【shell 编程大全】内容格式化以及多样化输出)的内容&#xff1a; 内容格式化 重定向管道符后台执行信息符号…

C语言学习_DAY_3_基本数据类型_运算符与表达式【C语言学习笔记】

目录 I. 基本数据类型 II. 复杂的输出和输入语句编写 III. 运算符与表达式 III.I 算术运算符 III.II 关系运算符 III.III 逻辑运算符 III.IV 位运算符 III.V 三目运算符 III.VI 逗号运算符 高质量博主&#xff0c;点个关注不迷路&#x1f338;&#x1f338;&#x1f3…

电脑怎么备份文件?含泪分享3种免费的方法

电脑里面保存着我们很多文件数据&#xff0c;比如工作文档、珍贵的照片、喜欢的音乐或者视频等。你很可能会遇到下面的原因而丢失数据&#xff1a;清空回收站&#xff0c;或者使用永久删除文件的方法&#xff1b;电脑出现故障&#xff0c;比如硬盘故障、系统崩溃&#xff1b;病…

Python实现基于openCV+百度智能云平台实现《1:N人脸考勤机》文章最后附带源码!

目录 一、 项目介绍 1.1 项目名称 1.2 项目简介 1.3 项目物料 1.4 技术栈 二、 项目架构 三、项目细节 3.1 环境搭建 3.2 利用opencv实现摄像头调取及相关图像的采集 3.3 利用aips上传图像和结果返回 3.4 结果优化和处理 3.5 可扩展性 3.6 遗留问题和…

中睿天下获评2022年度中关村网信联盟工业互联网标准工作特别贡献奖

近日&#xff0c;中关村网络安全与信息化产业联盟&#xff08;简称“CCAIA”&#xff09;于线上召开联盟第二届第五次会员大会&#xff0c;来自全国的联盟成员代表、行业专家等100余人出席会议&#xff0c;共同听取了联盟2022年工作总结与2023年工作计划&#xff0c;大会设置了…

春招Leetcode刷题日记-D2-贪心算法-训练专题

D2-贪心算法-训练专题贪心算法使用总结力扣605. 种花问题思路代码力扣763. 划分字母区间思路代码另一种思路贪心算法使用总结 当我们意识到&#xff0c;满足贪心算法三要素时候&#xff0c;解决贪心算法问题的时候&#xff0c;一定要遵循的步骤&#xff1a; 1、读懂题目限制条…

数据结构与算法:7种必须会的排序以及3种非基于比较排序

1.什么是排序 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序…

大数据专业职业前景如何

大数据专业毕业生未来的岗位选择空间比较大&#xff0c;有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位&#xff0c;在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类&#xf…

usbmon---Linux下USB数据传输监控

文章目录Usb包的总类&#xff08;1&#xff09;令牌包&#xff08;2&#xff09;数据包&#xff08;3&#xff09;握手包&#xff08;4&#xff09;特殊包Usb包的事务usb四种传输类型批量传输等时传输中断传输控制传输usbmon的使用&#xff08;1&#xff09;首先检测内核是否支…

算法刷题打卡第90天:表现良好的最长时间段

表现良好的最长时间段 难度&#xff1a;中等 给你一份工作时间表 hours&#xff0c;上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候&#xff0c;那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」&#xff0c;意味在这…