knife4j-swagger

文章目录

    • knife4j-swagger
      • 第 1 步:引入 jar 包
      • 第 2 步:添加注释来开启 knife4j
      • 第 3 步:验证
      • 问题解决
      • 新增功能:@ApiOperationSupport 注解
      • 新增功能:@DynamicParameters 注解
      • 忽略参数属性

knife4j-swagger

knife4j 是 Swagger 生成 API 文档的增强解决方案,knife4j 对原生 swagger 的增强体现在:

  • 提供了新的一套 Web 页面,更符合绝大多数人的使用习惯和审美;
  • 补充了一些注解,扩展了原生 Swagger 的功能;
  • 提供了动态字段注释功能来实现 Map 来接收参数这个的接口文档生成;
  • 忽略参数属性来实现同一个实体类对不同接口生成不同的文档等诸如此类的小改进。

在越来越多的产品出现后,knife4j 的优势和特点慢慢地变得稀松平常起来了…

第 1 步:引入 jar 包

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.2</version>    <!--  for swagger 3 -->
<!--<version>2.0.9</version>--> <!--  for swagger 2 -->
</dependency>

第 2 步:添加注释来开启 knife4j

@Configuration
@EnableOpenApi
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfig {

  // 其它内容一切照旧
  ....

}

第 3 步:验证

knife4j 有提供 UI 来显示,默认访问地址是:

http:// h o s t : {host}: host:{port}/doc.html

问题解决

  • 整合 spring-security 出现的“访问权限问题”解决
.antMatchers("/doc.html", "/webjars/**", "/swagger-ui/**", "/v3/api-docs/**",  "/swagger-resources/**").permitAll()
  • Spring MVC 中可能的“静态资源拦截问题”解决
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  }
}

新增功能:@ApiOperationSupport 注解

@ApiOperationSupport 注解是扩展增强注解,目前主要扩展的属性有 order(接口排序)、author(接口开发者)、params(动态字段集合)、responses(返回动态字段集合)、ignoreParameters 。

它是配合后续其它新增注解使用的。

新增功能:@DynamicParameters 注解

knife4j 官方不建议使用该功能,因为这个功能比较简陋,仅适用于较为简单的场景。

这是两个可以帮大家"偷懒"的注解:如果 Controller 的方法的参数有多个,但是大家又懒得去定义 FO 时,可以会使用 Map 来"收"参数。

这种情况下,可以使用 @DynamicParameters 来生成 map 的说明文档:

@PostMapping("/test1")
@ApiOperationSupport(params = @DynamicParameters(properties = {
    @DynamicParameter(name = "name", value = "名字", example = "张三"),
    @DynamicParameter(name = "sex", value = "性别", example = "女"),
    @DynamicParameter(name = "age", value = "年龄", example = "20")
}))
public void test1(@RequestBody Map<String, Object> map) {

    String name = (String) map.get("name");
    String sex = (String) map.get("sex");
    Integer age = (Integer) map.get("age");

    log.info("姓名:" + name);
    log.info("性别:" + sex);
    log.info("年龄:" + age);
}

自动生成接口文档如下:

knife4j-01

注意
@DynamicParameters 注解的功能比较简陋,只支持简单的情况。即,如果又更深层次、更复杂的嵌套关系,它就不好使了。

knif4j 的作者也是提醒大家不要滥用这个功能。

忽略参数属性

  • 提供两个 URI 接口作对比
@PostMapping("/test3")
public void test3(@RequestBody Student student) {
  log.info(student.toString());
}

@PostMapping("/test4")
@ApiOperationSupport(ignoreParameters = {"id"})
public void test4(@RequestBody Student student) {
  log.info(student.toString());
}
  • 自定义用于参数绑定的实体类
@Schema(description = "学生信息")
public class Student {

  @Schema(name = "主键")
  private String id;

  @Schema(name = "姓名")
  private String name;

  @Schema(name = "年龄")
  private Integer age;

  @Schema(name = "性别")
  private String sex;

  ...

}

自动生成文档如下:

knife4j-03

knife4j-04

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

W801 实现获取天气情况

看了小安派&#xff08;AiPi-Eyes 天气站&#xff09;的源码&#xff0c;感觉用W801也可以实现。 一、部分源码 main.c #include "wm_include.h" #include "Lcd_Driver.h"void UserMain(void) {printf("\n user task \n");Lcd_Init();Lcd_Clea…

Qt官方示例---opengl

文件相对路径&#xff1a;Examples\Qt-5.9.1\opengl 2dpainting cube computegles31 contextinfo hellogl2 hellowindow paintedwindow qopenglwidget qopenglwindow textures threadedqopenglwidget

VirtualBox设置共享文件夹,用于在Window11 和 Ubuntu22 中共享文件,2024亲测可用

VirtualBox设置共享文件夹&#xff0c;用于在Window11 和 Ubuntu22 中共享文件&#xff0c;2024亲测可用 Windows操作 1、新建文件夹&#xff0c;用于共享 Linux操作 1、添加共享文件夹 共享文件夹路径&#xff1a;选择Windows系统中你需要共享的文件夹 共享文件夹名称&am…

ROS2入门21讲__第07讲__节点:机器人的工作细胞

目录 前言 通信模型 案例一&#xff1a;Hello World节点&#xff08;面向过程&#xff09; 运行效果 代码解析 创建节点流程 案例二&#xff1a;Hello World节点&#xff08;面向对象&#xff09; 运行效果 代码解析 创建节点流程 案例三&#xff1a;物体识别节点 …

小蓝和小青在做数字破解游戏

小蓝和小青在做数字破解游戏,设某图案由m*n的0和1点阵组成&#xff0c;依照以下规则破解连续一组数值&#xff0c;从点阵图第一行第一个符号开始计算&#xff0c;从左到右&#xff0c;由上至下。第一个数表示连续有几个0&#xff0c;第二个数表示接下来连续有几个1&#xff0c;…

Nuxt3 实战 (七):配置 Supabase 数据库

前言 这个章节我们要先把数据库的环境配置好&#xff0c;古人云&#xff1a;工欲善其事&#xff0c;必先利其器。 这两天我一直在网上寻找最适合 Nuxt 的数据库&#xff0c;之前在做个人项目时经常用的是 Mysql 和 MongoDB&#xff0c;也用过 ORM 框架比如&#xff1a;Sequel…

flutter webview加载本地文件出现跨域解决方案

一直报错 [INFO:CONSOLE(17)] "Access to image at file:///android_asset/flutter_assets/assets/jump/box_bottom.png from origin null has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome…

留学服务平台应用架构的设计与优化

随着全球化进程的加速和人们对国际化教育的需求不断增长&#xff0c;留学服务平台在满足学生留学需求的同时也面临着诸多挑战。在这样的背景下&#xff0c;设计一个高效、稳定且安全可靠的留学服务平台应用架构显得尤为重要。本文将就留学服务平台应用架构的设计与优化进行探讨…

JKTECH柔性振动盘用途

柔性振动盘的作用与用途 在现代工业自动化领域&#xff0c;柔性振动盘凭借其独特的功能和广泛的应用场景&#xff0c;正逐渐成为生产线上的重要工具。柔性振动盘&#xff0c;又称柔性供料器&#xff0c;它结合了传统振动盘的高效性和现代自动化技术的灵活性&#xff0c;为各种…

vulhub——Aria2、bash、catic

文章目录 一、Aria2 任意文件写入漏洞二、CVE-2014-6271&#xff08;Bash Shell 漏洞&#xff09;三、CVE-2022-46169&#xff08;Cacti 前台命令注入漏洞&#xff09; 一、Aria2 任意文件写入漏洞 Aria2是一个命令行下轻量级、多协议、多来源的下载工具&#xff08;支持 HTTP…

【MySQL精通之路】InnoDB(10)-行格式

目录 1.表数据结构 1.1 聚集索引数据结构 1.2 辅助索引数据结构 2.行格式 2.1 REDUNDANT行格式 2.2 REDUNDANT存储特性 2.3 COMPACT行格式 2.4 COMPACT存储特性 2.5 DYNAMIC行格式 2.6 DYNAMIC存储特性 2.7 COMPRESSED行格式 2.8 COMPRESSED存储特性 3.定义表格的…

我怎么使用AI大语言模型学英语

今天已经是我开始英语拉练任务的第39天了&#xff0c;一直在笃定的、雷打不动的、机械笨拙的重复做一件事&#xff0c;那就是使用AI工具&#xff0c;将我想要说的话翻译成英文&#xff0c;生成语音文件&#xff0c;每天朗读三小时&#xff0c;最终整个背下来。我也在思考&#…

【人工智能】数据分析与机器学习——泰坦尼克号(更新中)

1912年4月15日&#xff0c;泰坦尼克号在首次航行期间撞上冰山后沉没&#xff0c;船上共有2224名乘客和乘务人员&#xff0c;最终有1502人遇难。沉船导致大量伤亡的重要原因之一是&#xff0c;没有足够的救生艇给乘客和船员。虽然从这样的悲剧性事故中幸存下来有一定的运气因素&…

Aware接口作用

介绍 Aware&#xff08;感知&#xff09;接口是一个标记&#xff0c;里面没有任何方法,实际方法定义都是子接口确定&#xff08;相当于定义了一套规则&#xff0c;并建议子接口中应该只有一个无返回值的方法&#xff09;。 我们知道spring已经定义好了很多对象&#xff0c;如…

半导体测试基础 - 基本概念

随着芯片集成度越来越高&#xff0c;手动测试已无法满足需求&#xff0c;因此要用到自动化测试设备&#xff08;ATE&#xff0c;Automated Test Equipment&#xff09;。因为现在的芯片原来越复杂&#xff0c;普通的 Bench 测试没法满足需求。ATE 可检测集成电路功能之完整性&a…

Joomla 3.7.0 (CVE-2017-8917) SQL注入漏洞环境

1 漏洞概述 Joomla是一个基于PHP的内容管理系统&#xff08;CMS&#xff09;&#xff0c;广泛应用于各类网站。2017年&#xff0c;Joomla 3.7.0版本被发现存在SQL注入漏洞&#xff08;CVE-2017-8917&#xff09;&#xff0c;攻击者可以利用该漏洞对数据库进行未授权查询或操作…

Centos 7.9 使用 iso 搭建本地 YUM 源

Centos 7.9 使用 iso 搭建本地 YUM 源 1 建立挂载点 [rootlocalhost ~]# mkdir -p /media/cdrom/ 2 创建光盘存储路径 [rootlocalhost ~]# mkdir -p /mnt/cdrom/ 3 上传 CentOS-7-x86_64-Everything-2207-02.iso 到 光盘存储路径 [rootlocalhost ~]# ls /mnt/cdrom/ CentOS-…

基于机器学习模型预测信用卡潜在用户(XGBoost、LightGBM和Random Forest)

基于机器学习模型预测信用卡潜在用户&#xff08;XGBoost、LightGBM和Random Forest&#xff09; 随着数据科学和机器学习的发展&#xff0c;越来越多的企业开始利用这些技术来提高运营效率。在这篇博客中&#xff0c;我将分享如何利用机器学习模型来预测信用卡的潜在客户。此…

如何设计足够可靠的分布式缓存体系,以满足大中型移动互联网系统的需要?no.31

传统 CAP 的突破 随着分布式系统的不断演进&#xff0c;会不断遇到各种问题&#xff0c;特别是当前&#xff0c;在大中型互联网系统的演进中&#xff0c;私有云、公有云并行发展且相互融合&#xff0c;互联网系统的部署早已突破单个区域&#xff0c;系统拓扑走向全国乃至全球的…

[深度学习]基于yolov8+bytetrack+pyqt5实现车辆进出流量统计+车辆实时测速实现

以前使用过yolov5deepsort实现过车辆进出流量统计车辆实时测速&#xff0c;可以看我往期视频&#xff0c;这回改成yolov8bytetrack实现&#xff0c;实时性更好&#xff0c;原理和原来一样。车流量进出统计车速测量优点&#xff1a; 使用目标检测算法考虑bbox抖动&#xff0c;解…