接口文档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 []
     */
    @Bean
    public 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: true
  application-name: CamundaProject
  application-version: 1.0
  application-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 {
        @Autowired
        private 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;
    
        @Override
        public 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

在这里插入图片描述

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

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

相关文章

【Tailwind】各种样式的进度条

基本样式进度条&#xff1a; <div class"mb-5 h-2 rounded-full bg-gray-200"><div class"h-2 rounded-full bg-orange-500" style"width: 50%"></div> </div>带文字的进度条&#xff1a; <div class"relativ…

销售退货单单据录入的序列号当前单据类型不在允许范围内

文章目录 销售退货单单据录入的序列号当前单据类型不在允许范围内报错截图原因分析 销售退货单单据录入的序列号当前单据类型不在允许范围内 报错截图 销售退货单保存 原因分析 销售退货单序列号录入设置&#xff1a; 报错不满足条件的序列号&#xff0c;最后出库是 其他…

golang整合rabbitmq,创建交换机并绑定队列

1,如果要开发消息队列,需要创建交换机和队列,通常有2中方式创建,1种是在面板直接创建 2,第二种就是在代码中创建,这里 展示的是go语言代码中创建rabbitmq package mainimport ("fmt""log""github.com/streadway/amqp" )func main() {// 连接R…

Java 枚举和注解

一、枚举类 把具体的对象一个一个例举出来的类就称为枚举类 枚举对应英文(enumeration, 简写 enum)枚举是一组常量的集合。可以这里理解&#xff1a;枚举属于一种特殊的类&#xff0c;里面只包含一组有限的特定的对象。 1.实现方式1——自定义类实现枚举 public class Enume…

前端面试题:topK算法

当面试官问你&#xff0c;在不考虑数字越界的情况下&#xff0c;有1亿条搜索数据&#xff0c;让你从中找到前100条频率高的数据你会怎么实现&#xff1f; 当时&#xff0c;我的第一印象是把数据分组&#xff0c;分别求前多少条&#xff1f;但是没法保证每组的前100条或者多少条…

关于Linux系统的目录结构介绍常用命令介绍

目录 一. Linux系统目录结构介绍 二. 一些常用命令的介绍 1、# 与 $的区别 2、ifconfig 3、su 4、cd 5、目录查看 6、查看文件内容 7、创建目录及文件 8、复制和移动 9、其他 10、tar 11、which 12、whereis 13、find 14、chmod 三. vim的基本使用 四. SSH密…

【推荐100个unity插件之16】3D物品描边效果——Quick Outline免费插件

文章目录 前言地址介绍使用例子完结 前言 关于3D描边&#xff0c;其实之前有用shader弄过一个&#xff1a;【实现100个unity特效】shader实现3D物品闪光和描边效果 但是很遗憾的是他不支持URP项目&#xff0c;所以现在推荐这款插件&#xff0c;他能很好的支持URP&#xff0c;…

MyBatis中一级缓存是什么?SqlSession一级缓存失效的原因?如何理解一级缓存?

一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就 会从缓存中直接获取&#xff0c;不会从数据库重新访问 使一级缓存失效的四种情况&#xff1a; 1) 不同的SqlSession对应不同的一级缓存 2) 同一…

蓝桥杯备赛 week 3 —— 高精度(C/C++,零基础,配图)

目录 &#x1f308;前言&#xff1a; &#x1f4c1; 高精度的概念 &#x1f4c1; 高精度加法和其模板 &#x1f4c1; 高精度减法和其模板 &#x1f4c1; 高精度乘法和其模板 &#x1f4c1; 高精度除法和其模板 &#x1f4c1; 总结 &#x1f308;前言&#xff1a; 这篇文…

电饼铛行业研究:中国市场规模整体上涨趋势明显

电饼铛是一个烹饪食物的工具&#xff0c;单面或者上下两面同时加热使中间的食物经过高温加热&#xff0c;达到烹煮食物的目的。电饼铛也叫烤饼机&#xff0c;可以灵活进行烤、烙、煎等烹饪方法&#xff0c;有家用小款型和店面使用大款两种。 大型的电饼铛具有自动上下火控温…

Python基础语法:代码规范、判断语句与循环语句

目录 一、代码规范 二、判断语句 三、循环语句 总结&#xff1a; Python是一种高级、动态类型的编程语言&#xff0c;其语法清晰、简洁&#xff0c;易于学习。本文将介绍Python基础语法中的代码规范、判断语句和循环语句。 一、代码规范 良好的代码规范可以提高代码的可读…

谈谈ArrayList和LinkedList的区别

目录 一、什么是数组 二、ArrayList 三、LinkedList 四、ArrayList和LinkedList的区别 一、什么是数组 在编程中&#xff0c;数组&#xff08;Array&#xff09;是一种用于存储多个相同类型数据元素的数据结构。它是一个有序的集合&#xff0c;其中每个元素都有一个唯一的…

Windows11操作系统百科

简介 Windows 11是由微软公司&#xff08;Microsoft&#xff09;开发的操作系统&#xff0c;应用于计算机和平板电脑等设备 [1]。于2021年6月24日发布 [3]&#xff0c;2021年10月5日发行 [29]。 Windows 11提供了许多创新功能&#xff0c;增加了新版开始菜单和输入逻辑等 [6]…

Java 字符串 04 练习-用户登录

自己写的代码&#xff1a; import java.util.Scanner; public class practice {static String rightUsername "zhangsan";static String rightPassword "123456";public static void main(String[] args) {//读题拆解法//1、定义两个变量&#xff0c;记…

机器学习--jupyter使用

机器学习–jupyter notebook的使用 Jupyter项目是一个非盈利的开源项目&#xff0c;源于2014年的ipython项目&#xff0c;因为它逐渐发展为支持跨所有编程语言的交互式数据科学和科学计算 Jupyter Notebook&#xff0c;原名IPython Notbook&#xff0c;是IPython的加强网页版…

NAS with RL(使用强化学习进行神经网络架构搜索,基于pytorch框架)

目录 一、 原代码 二、 代码学习(修改后并加上详细注释&#xff09; 1. 控制器 2. NASModel 3. 初始化及训练过程 3.1 主要参数的初始化 3.2 数据集的准备与加载 3.3 搜索空间 3.4 训练、参数更新 4. 对搜索空间、搜索策略、性能评估策略的认识 4.1 搜索空间&#xf…

PicGo+雨云ROS搭建自己的图床,可配合Typora使用

本文将手把手带你使用PicGo雨云对象存储ROS(Rain Object Storage)搭建自己专属的免费图床&#xff0c;并且可以配合Typora使用。 雨云对象存储服务介绍和使用教程&#xff1a;https://forum.rainyun.com/t/topic/5573 目前雨云对象存储是公测阶段&#xff0c;暂时是免费的。 …

杰卡德距离(Jaccard Distance)

杰卡德距离&#xff08;Jaccard Distance&#xff09;&#xff0c;是用于衡量两个集合差异性的一种指标&#xff0c;它是杰卡德相似系数的补集&#xff0c;可以用来区分集合&#xff08;如知识图谱&#xff09;。 杰卡德相似系数 杰卡德相似系数&#xff08;Jaccard similari…

01-echarts如何绘制三维折线图

echarts如何绘制三维折线图 一、相关依赖包1、下载依赖2、引入依赖 二、创建图表盒子1、创建盒子2、定义数据3、编写方法1、初始化盒子2、设置配置项3、修改数据格式4、设置颜色数组4、设置name数组5、设置线三维和点三维6、添加配置项7、设置图表自适应 4、调用方法 三、整体代…

【脑电信号处理与特征提取】P2-夏晓磊:脑电的神经起源与测量

夏晓磊&#xff1a;脑电的神经起源与测量 专业术语 electroencephalography(EEG) 脑电图 Excitatory Postsynaptic Potential(EPSP) 兴奋性突触后电位 Electrocorticography(ECoG) 皮层脑电图 什么是脑电/脑电图&#xff08;EEG&#xff09;&#xff1f; Electroencephalograp…