接口文档swagger2的使用

Spring-接口文档swagger2

1、swagger/knife4j 接口文档配置

​ knife4j是swagger的增强版本,更加的小巧、轻量,功能也是更加的完善,UI也更加的清晰;可以从swagger到knife4j无缝切换。

1.1 引入相关依赖

 <!--接口文档的开发: knife4j是swagger的增强版本,更加的小巧、轻量,功能也是更加的完善,UI也更加的清晰;可以从swagger到knife4j无缝切换。-->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>

swagger接口文档访问地址:

http://192.168.0.145:9991/swagger-ui/index.html

knife4j接口文档的访问地址:

http://192.168.0.145:9991/doc.html

1.2 创建Swagger配置类

​ 我这里的接口文档信息,是通过application.properties 中配置注入的,这样方便修改相关信息,而不同改变源码。

package cn.zhidasifang.common.config;import com.sun.org.apache.xpath.internal.operations.Bool;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
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;/*** @author: AD_Liu* @Description: 接口文档Swagger配置类* @ClassName: SwaggerConfig*/
@Component
@EnableSwagger2
public class SwaggerConfig {@Value("${swagger.enable}")private Boolean swaggerEnable;@Value("${swagger.title}")private String title;@Value("${swagger.description}")private String description;@Value("${swagger.contact.name}")private String name;@Value("${swagger.contact.url}")private String url;@Value("${swagger.contact.email}")private String email;@Value("${swagger.version}")private String version;/*** @return springfox.documentation.service.ApiInfo* @Description:获取封装好的接口文档信息* @Param []*/public ApiInfo getApiInfo() {return new ApiInfoBuilder()//设置标题.title(title)//描述.description(description)//作者信息.contact(new Contact(name, url, email)).termsOfServiceUrl(url)//版本.version(version).build();}/*** @return springfox.documentation.spring.web.plugins.Docket* @Description:定义接口文档的基本信息* @Param []*/@Beanpublic Docket configUi() {return new Docket(DocumentationType.SWAGGER_2)//统一前缀的配置?//.pathMapping(url)//定义是否开启 swagger。false关闭.enable(swaggerEnable)//创建api的基本信息.apiInfo(getApiInfo())//选择那些接口作为swagger的doc发布.select()//控制那些接口暴露给swagger//.apis(RequestHandlerSelectors.any()) //所有暴露//RequestHandlerSelectors.basePackage("com.demo.security.*") 指定包定位//RequestHandlerSelectorswithMethodAnnotation(ApiOperation.class) 标记又 @ApiOperation注解 的接口暴露//.apis(RequestHandlerSelectors.basePackage("cn.zhidasifang.camundaproject.SalaryProcess.controller")).apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))//.paths(PathSelectors.regex("/error").negate()).paths(PathSelectors.any()).build();}
}
  • application.properties 文件中的数据
#接口文档相关配置信息
swagger.enable = true
swagger.title = 流程控制相关_接口文档
swagger.description = 流程中相关接口文档,接口分类:流程模快定义、流程任务处理、表单模快等
swagger.contact.name = Liu
swagger.contact.url = 192.168.0.145:9991
swagger.contact.email = 1299637404@qq.com
swagger.version = 1.0

1.3 application.yml 配置文件中的相关配置信息

​ 高版本的SpringBoot 在整合 Swagger 时,还需要在yml 文件中配置增加路径配置,这里需要在spring.mvc.pathmatch.matching-strategy:项中配置 匹配路径 ant_path_matcher。

​ 否则就会在项目启动时报错!

spring:mvc:pathmatch:matching-strategy: ant_path_matcher #swagger配置#Swagger配置      
swagger:enable: trueapplication-name: CamundaProjectapplication-version: 1.0application-description: client
knife4j:enable: true

2、swagger常用注解

2.1 @Api 注解

​ 用在请求的类上,表示对类的说明:常用属性介绍:

  • tags=“说明该类的作用,可以在UI界面上看到的注解”

  • value=“该参数没什么意义,在UI界面上也看到,所以不需要配置”

    @Api的其它属性配置

    属性名称作用
    valueurl的路径值
    tags如果设置这个值、value的值会被覆盖
    description对api资源的描述
    basePath基本路径
    position如果配置多个Api 想改变显示的顺序位置
    produces如, “application/json, application/xml”
    consumes如, “application/json, application/xml”
    protocols协议类型,如: http, https, ws, wss
    authorizations高级特性认证时配置
    hidden配置为true ,将在文档中隐藏

ApiSupport( order =1/2/3 ) 文档中接口类排序顺序注解

2.2 方法/方法参数描述注解

​ 主要涉及到三个注解分别是:

2.2.1 @ApiOperation注解

@ApiOperation:用在请求的方法上,说明方法的用途、作用

属性 value=“说明方法的用途、作用”

属性 notes=“方法的备注说明”

2.2.2 @ApiImplicitParams注解

@ApiImplicitParams:方法参数的说明

@ApiImplicitParams注解需要包含一个或者多个 @ApiImplicitParam注解。格式如下

@ApiImplicitParams({@ApiImplicitParam(name = "sysForm",value ="ApiImplicitParam表单定义实体类参数1111")
})
2.2.3 @ApiImplicitParam注解

@ApiImplicitParam:用于指定单个参数的说明

@ApiImplicitParam注解,可以单独使用在方法上,能说明单个参数的相关信息。也可包含在@ApiImplicitParams注解中使用。对应的属性有如下所示:

属性名称作用
name参数名
value参数的汉字说明、解释
required参数是否必须传
paramType参数放在哪个地方
dataType参数类型,默认String,其它值dataType=“Integer”
defaultValue参数的默认值

其中 paramType 属性对应用下面几种类型:

  • header --> 请求参数的获取:@RequestHeader
  • query --> 请求参数的获取:@RequestParam
  • path(用于restful接口)–> 请求参数的获取:@PathVariable
  • body(不常用)
  • form(不常用)

@ApiOperationSupport( order=1/2/3 ) 同一类中的接口排列顺序

2.3 接口响应状态的描述

  • @ApiResponses : 方法返回值的说明 。

    @ApiResponses:响应状态的说明。是个数组,可包含多个 @ApiResponse

  • @ApiResponse:用于指定单个参数的说明。

    属性值:

    • code:数字,例如400
    • message:信息,例如"请求参数没填好"
    • ​ response:抛出异常的类

2.4 实体类对象描述注解

主要包含两个注解分别是

  • @ApiModel :经常用于请求的入参对象 和 响应返回值对象的描述,在接口方法上使用

    属性描述:

    • 属性value : 实体类名称
    • 属性notes :实体类描述信息
  • @ApiModelProperty :用于每个属性上面,说明属生的含义。

3、示例展示

  • Controller层接口文档注解演示

    /*** @author AD* @Description: xxxx* @ClassName: FormInfoResource**/
    @Controller
    @RequestMapping("/form/formInfo")
    @Api(tags = "自定义表单管理接口")
    public class FormController {@Autowiredprivate IFormInfoService formInfoService;@PostMapping("/test")@ResponseBody@ApiImplicitParams({@ApiImplicitParam(name = "sysForm",value ="ApiImplicitParam表单定义实体类参数1111")})public String testForm(@RequestBody SysForm sysForm){System.out.println("sysForm = " + sysForm);formInfoService.saverFormInfo(sysForm);return "测试多项目模快成!";}
    }
    

  • 实体类接口文档注解演示

    package cn.zhidasifang.formmanagement.model;import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    import lombok.experimental.Accessors;
    import springfox.documentation.spring.web.json.Json;import java.io.Serializable;
    import java.util.List;
    import java.util.Map;/*** 流程表单对象 sys_task_form* @author AD* @author Tony*/@Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Accessors(chain = true) /**支持链式编程*/
    @ApiModel(value = "自定义表单实体类",description = "自定义表单对应的实体类,实体类出现在自定义表单创建时/前端解析自定义表单类型数据时。")
    public class SysForm implements Serializable {/** 表单主键 */@ApiModelProperty(value = "定义表单主键(String)",required = true)private String id;/** 表单类型 */@ApiModelProperty(name = "",value ="定义表单的格式类型(String)",required = true)private String type;/** 表单名称 */@ApiModelProperty(value = "表单定义时所代表的单据类型(String)",required = true)private String title;/** 表单内容:json格式的数据 */@ApiModelProperty(value = "表单定义体:表单中的主体数据类型(List<Map<Object,Object>>)",required = true)private List<Map<Object,Object>> body;/** 表单pullRefresh */@ApiModelProperty(value ="pullRefresh(Map<Object,Object>)",required = true)private Map<Object,Object> pullRefresh;/** 表单regions */@ApiModelProperty(value = "regions(List<Object>)",required = true)private List<Object> regions;@Overridepublic String toString() {return "SysForm{" +"id='" + id + '\'' +", type='" + type + '\'' +", title='" + title + '\'' +", body='" + body + '\'' +", pullRefresh='" + pullRefresh + '\'' +", regions='" + regions + '\'' +'}';}
    }
    
  • 访问画面展示

    Swagger接口文档访问展示:http://192.168.0.145:9991/swagger-ui/index.html

    在这里插入图片描述

​ knife4j接口文档访问展示:http://192.168.0.145:9991/doc.html

在这里插入图片描述

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

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

相关文章

神经网络:表述(Neural Networks: Representation)

1.非线性假设 无论是线性回归还是逻辑回归&#xff0c;当特征太多时&#xff0c;计算的负荷会非常大。 案例&#xff1a; 假设我们有非常多的特征&#xff0c;例如大于 100 个变量&#xff0c;我们希望用这 100 个特征来构建一个非线性的多项式模型&#xff0c;结果将是数量非…

Win10 如何用powershell写个WOL开机脚本

环境&#xff1a; Win10 专业版 问题描述&#xff1a; Win10 如何用powershell写个WOL开机脚本 解决方案&#xff1a; 1.脚本内容 $mac b1-10-18-52-11-12 $macBytes $mac -split - | ForEach-Object { [byte](0x $_) } $broadcastAddress [byte[]](1..6 | ForEach-O…

springboot导出数据到excel模板,使用hutool导出数据到指定excel,java写入数据到excel模板

最近遇到一个需求&#xff0c;需要从数据库查询数据&#xff0c;写入到对应的excel导入模板中。再把导出的数据进行修改&#xff0c;上传。 我们项目用的是easyExcel&#xff0c;一顿百度搜索&#xff0c;不得其法。 主要是要把数据填充到指定单元格中&#xff0c;跟平时用到的…

【Android】细数Linux和Android系统中的伪文件系统

文章目录 前言Linux伪文件系统cgroupfsLinux的cgroupsAndroid的cgroups debugfsfunctionfs(/dev/usb-ffs/adb)functionfs 的引入sysfs是什么 procfs(/proc)pstore(/sys/fs/pstore)selinuxfs(/sys/fs/selinux)sysfs(/sys)参考 前言 做了好些年Android开发&#xff0c;你了解过L…

Java Web(二)--HTML

基本介绍 官网文档地址: HTML 教程 HTML&#xff08;HyperText Mark-up Language&#xff09;即超文本标签语言&#xff1b;HTML 文本是由 HTML 标签组成的文本&#xff0c;可以包括文字、图形、动画、声音、表格、链接等&#xff1b;HTML 的结构包括头部&#xff08;Head&…

学校“数据结构”课程Project—扩展功能(自主设计)

目录 一、设想功能描述 想法缘起 目标功能 二、问题抽象 三、算法设计和优化 1. 易想的朴素搜索 / dp 搜索想法 动态规划&#xff08;dp&#xff09;想法 2. 思考与优化 四、算法实现 五、结果示例 附&#xff1a;使用的地图API 一、设想功能描述 想法缘起 OSM 导出…

汽车网络架构与常用总线汇总

汽车CAN总线简述 CAN 是控制器局域网Controller Area Network 的缩写&#xff0c;1986年&#xff0c;由德国Bosch公司为汽车开发的网络技术&#xff0c;主要用于汽车的监测与控制&#xff0c;目的为适应汽车“减少线束的数量”“通过多个网络进行大量数据的高速传输”的需求。…

TA百人计划学习笔记 3.1.1模板测试

资料 源视频 【技术美术百人计划】图形 3.1 深度与模板测试 传送门效果示例_哔哩哔哩_bilibili ppt 3100-模板测试与深度测试(1) 参考 Unity Shader: 理解Stencil buffer并将它用于一些实战案例&#xff08;描边&#xff0c;多边形填充&#xff0c;反射区域限定&#xff0c;阴影…

c++学习笔记-STL案例-机房预约系统6-老师模块

前言 衔接上一篇“c学习笔记-STL案例-机房预约系统5-学生模块”&#xff0c;本文主要设计老师模块&#xff0c;从&#xff0c;老师登录和注销、查看所有预约、审核预约三个方面进行分析和实现。 目录 9 教师模块 9.1 教师登录和注销 9.1.1 构造函数 9.1.2 教师子菜单 ​编…

Linux7 安装 Oracle 19C RAC 详细图文教程

实战篇&#xff1a;Linux7 安装 Oracle 19C RAC 详细图文教程 本文是按照&#xff1a;https://www.modb.pro/db/154424的思路进行编写 一、安装前规划 安装RAC前&#xff0c;当然要先做好规划。具体包含以下几方面&#xff1a; 节点主机版本主机名实例名Grid/Oracle版本Publi…

鸿蒙原生开发-仿ChatGPT应用实战

运行环境 DAYU200:4.0.10.16 SDK&#xff1a;4.0.10.15 IDE&#xff1a;4.0.600 前言 在配置好环境之后&#xff0c;可以尝试这编写一个较为简单的应用程序练练手&#xff0c;这里选择使用一个免费的API接口网站 ALAPI来尝试编写一个可进行对话的GPT应用程序。 创建项目 …

SQL注入示例

例一、基础SQL注入&#xff1a;load_file读文件 CISP-PTE 认证考试 首先是有单引号和括号的&#xff0c;首要是要闭合&#xff0c;然后回显点是在-1的位置&#xff0c;读取文件上面的key的话使用的是load_file(/tmp/360/key) id-1)%09ununionion%09select%091,2,3,load_file…

【算法与数据结构】322、LeetCode零钱兑换

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题可以抽象成一个完全背包问题。 第一步&#xff0c; d p [ j ] dp[j] dp[j]的含义。 d p [ j ] dp…

Unity之Cinemachine教程

前言 Cinemachine是Unity引擎的一个高级相机系统&#xff0c;旨在简化和改善游戏中的相机管理。Cinemachine提供了一组强大而灵活的工具&#xff0c;可用于创建令人印象深刻的视觉效果&#xff0c;使开发人员能够更轻松地掌控游戏中的摄像机行为。 主要功能和特性包括&#x…

Springboot+vue的医院后台管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的医院后台管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的医院后台管理系统&#xff0c;采用M&#xff08…

LeetCode、875. 爱吃香蕉的珂珂【中等,最小速度二分】

文章目录 前言LeetCode、875. 爱吃香蕉的珂珂【中等&#xff0c;最小速度二分】题目及分类思路分析及代码实现代码优化 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Ja…

如何修改flutter的minSdkVersion版本?

在使用第三方插件的时候&#xff0c;插件对最低的 minSdkVersion版本是有要求的&#xff0c;你比如flutter 插件 webview_flutter 就会报一下错&#xff1a; minSdkVersion 16 cannot be smaller than version 19 declared in library 解决方法①&#xff1a; 这个时候我们需…

Python爬虫框架选择与使用:推荐几个常用的高效爬虫框架

目录 前言 一、Scrapy框架 1. 安装Scrapy 2. Scrapy示例代码 3. 运行Scrapy爬虫 二、Beautiful Soup库 1. 安装Beautiful Soup 2. Beautiful Soup示例代码 3. 运行Beautiful Soup代码 三、Requests库 1. 安装Requests库 2. Requests示例代码 3. 运行Requests代码 …

【蓝桥杯--图论】最小生成树prim、kruskal

今日语录&#xff1a;成功不是终点&#xff0c;失败不是致命&#xff0c;勇气才是取胜的关键。 文章目录 prim算法kruskal算法(稀疏图) prim算法 #include <cstring> #include <algorithm> #include <iostream>#define _CRT_SECURE_NO_WARNINGS using names…

8 种网络协议

什么是网络协议&#xff1f; 网络协议就是计算机之间沟通的语言&#xff0c;为了有效地交流&#xff0c;计算机之间需要一种共同的规则或协议&#xff0c;就像我们和老外沟通之前&#xff0c;要先商量好用哪种语言&#xff0c;要么大家都说中文&#xff0c;要么大家都说英语&a…