接口文档swagger2的使用

news2024/11/17 21:48:07

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

在这里插入图片描述

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

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

相关文章

FastDeploy项目简介,使用其进行(图像分类、目标检测、语义分割、文本检测|orc部署)

FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具&#xff0c; 支持云边端部署。提供超过 &#x1f525;160 Text&#xff0c;Vision&#xff0c; Speech和跨模态模型&#x1f4e6;开箱即用的部署体验&#xff0c;并实现&#x1f51a;端到端的推理性能优化。包括 物…

Django从入门到精通(三)

目录 七、ORM操作 7.1、表结构 常见字段 参数 示例 7.2、表关系 一对多 多对多 第一种方式 第二种方式 7.3、连接MYSQL 7.4、数据库连接池 7.5、多数据库 读写分离 分库&#xff08;多个app ->多数据库&#xff09; 分库&#xff08;单app&#xff09; 注意…

坚持刷题 | 平衡二叉树

文章目录 题目考察点代码实现实现总结对实现进一步改进扩展提问 坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天继续二叉树&#xff1a;平衡二叉树 题目 110.平衡二叉树 考察点 递归能力&#xff1a; 能否使用递归来解决问题。树的基本操作&#xff1a;能否正确地访…

10.Elasticsearch应用(十)

Elasticsearch应用&#xff08;十&#xff09; 1.为什么需要聚合操作 聚合可以让我们极其方便的实现对数据的统计、分析、运算&#xff0c;例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售情况如…

常用电子器件学习——光耦

光耦介绍 光耦合器一般由三部分组成&#xff1a;光的发射、光的接收及信号放大。 输入的电信号驱动光发射源&#xff0c;使之发光&#xff0c;被光探测器接收而产生光电流&#xff0c;再经过进一步放大后输出。这就完成了电—光—电的转换&#xff0c;从而起到输入、输出、隔离…

Ubuntu 22.04安装Nginx负载均衡

君衍. 一、编译安装Nginx二、轮询算法实现负载均衡三、加权轮询算法实现负载均衡四、ip_hash实现负载均衡 一、编译安装Nginx 这里我们先将环境准备好&#xff0c;我使用的是Ubuntu22.04操作系统&#xff1a; 这个是我刚安装好的&#xff0c;所以首先我们进行保存快照防止安装…

APP出海广告变现对接Admob

AdMob成立于2006年&#xff0c;并于2009年被Google收购。从那以后&#xff0c;AdMob在游戏及应用广告变现的重要性不断上升。凭借Google的血统&#xff0c;AdMob广告网络拥有其他广告平台不具备的优势&#xff1a;它可以访问无数的Google广告客户数据库。不仅如此&#xff0c;A…

线性代数速通

二---矩阵 逆矩阵 抽象矩阵求逆 数字型矩阵求逆 二阶矩阵求逆秒杀 解矩阵方程 方阵 伴随矩阵 三---向量组的线性相关性 线性表示 数字型向量组 线性相关性判断 抽象型向量组 线性相关性判断 向量组的秩与极大无关组 四---线性方程组 齐次方程组 基础解系 通解 非齐…

数学建模绘图

注意&#xff1a;本文章旨在记录观看B站UP数模加油站之后的笔记文章&#xff0c;无任何商业用途~~ 必备网站 以下网站我都试过&#xff0c;可以正常访问 配色&#xff08;取色&#xff09;网站&#xff1a; Color Palettes Generator and Color Gradient Tool Python&#x…

【论文阅读笔记】Towards Universal Unsupervised Anomaly Detection in Medical Imaging

Towards Universal Unsupervised Anomaly Detection in Medical Imaging arxiv&#xff0c;19 Jan 2024 【开源】 【核心思想】 本文介绍了一种新的无监督异常检测方法—Reversed Auto-Encoders (RA)&#xff0c;旨在提高医学影像中病理检测的准确性和范围。RA通过生成类似健…

1990-2019年城市维度区域创新创业指数面板数据/地级市创新创业指数面板数据

1990-2019年城市维度区域创新创业指数面板数据/地级市创新创业指数面板数据 1、时间&#xff1a;1990-2019年 2、范围&#xff1a;地级市&#xff08;290&#xff09; 3、指标&#xff1a;序号、年份、城市码、城市、总维度&#xff1a;总量指数得分、人均得分、单位面积得分…

《WebKit 技术内幕》学习之十(4): 插件与JavaScript扩展

4 Chromium扩展机制 4.1 原理 Chromium的扩展&#xff08;Extension&#xff09;机制 (1) 原先是Chromium推出的一项技术&#xff0c;该机制能够扩展浏览器的能力&#xff0c;例如笔者使用的一个扩展实例名为“switchy proxy”&#xff0c;它可以帮助用户方便的切换Chromium…

阿里云服务器4核16G3M32.25元,4核32G10M113.24元深度测评与购买建议

2024年1月24日&#xff0c;阿里云再次为用户带来了惊喜&#xff0c;推出了两款极具性价比的特价云服务器。其中&#xff0c;4核16G3M带宽的特惠价格仅为32.25元/月、96.75元/3个月&#xff0c;而4核32G10M带宽的特惠价格也仅为113.24元/月、339.72元/3个月。那么&#xff0c;这…

Redis性能运行参数的监测工具 - WGCLOUD

WGCLOUD是一款开源免费的运维监控平台&#xff0c;可以监测Redis的运行情况&#xff0c;比如redis的Key数量&#xff0c;过期Key数量&#xff0c;Redis的端口号&#xff0c;Redis的版本&#xff0c;同步状态&#xff0c;集群模式&#xff0c;使用内存等等数据 中间件Redis监测…

java基础:随机生成几个整数存放到数组里并按顺序输出案例分析

思路分析 具体步骤如下&#xff1a; 创建一个数组&#xff0c;用于存放生成的随机数。 定义最大值和最小值&#xff0c;用于限定随机数的取值范围。 使用循环和Random类中的方法生成随机数&#xff0c;并将其添加到数组中。 使用Arrays类中的sort()方法对数组进行排序&#…

牛客——都别吵吵了,我才是签到(质因数分解和统计质因数次数)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 陶陶刚上一年级&#xff0c;今天数学课上老师教了乘法和除法&#xff0c;老师留了一道课后习题&#xff0c;陶陶很快地写完了&#xff0c;现在想请你帮助他检查一下是否和答案一致。…

应急响应红蓝工程师白帽子取证Linux和windows入侵排查还原攻击痕迹,追溯攻击者,以及各种木马和病毒以及恶意脚本文件排查和清除

应急响应红蓝工程师白帽子取证Linux入侵排查还原攻击痕迹,追溯攻击者,以及各种木马和病毒以及恶意脚本文件排查和清除。 一般服务器被入侵的迹象,包括但不局限于:由内向外发送大量数据包(DDOS肉鸡)、服务器资源被耗尽(挖矿程序)、不正常的端口连接(反向shell等)、服务…

简单模拟实现一个线程池

废话不多说之间上代码 import java.util.ArrayList; import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue;public class MyThreadPoolExecutor {private List<Thread> listnew ArrayList<>();pri…

安全防御综合组网实验

题目 要求 生产区在工作时间可以访问服务器区&#xff0c;仅可以访问http服务器。办公区全天可以访问服务器区&#xff0c;其中10.0.2.20 可以访问FTP服务器和http服务器。10.0.2.10仅可以ping通10.0.3.10。办公区在访问服务器区时采用匿名认证的方式进行上网行为管理。办公区…

cmd_to_robot 讨论及 G29 控制优化

cmd_to_robot 讨论及 G29 控制优化 cmd_to_robot 讨论 转向电机控制代码中&#xff0c;补偿信息在循环中发布&#xff0c;转向完成信息在回调函数中发布 转动电机控制代码中&#xff0c;对转动电机的控制在转向完成的回调函数中实现 这就意味着如果一直没有 /cmd_vel 消息发…