Swagger的使用

news2024/9/22 1:12:24

一、概述

  • RestFul Api文档在线自动生成工具 =>Api文档与API定义同步更新
  • 直接运行,可以在线测试API接口
  • 支持多种语言:(Java,Php)

官网:https://swagger.io/

二、使用

在项目中使用Swagger需要springfox;

  • Swagger2
  • ui

SpringBoot集成Swagger

  • 新建一个SpringBoot项目
  • 导入相关依赖
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>
  • 编写hello测试

  • 配置swagger-config

在这里插入图片描述

@Configuration
@EnableSwagger2      //开启Swagger2
public class SwaggerConfig {
    
}
  • 访问swagger
http://localhost:8080/swagger-ui.html

在这里插入图片描述

Springboot版本与springfox版本可能存在版本冲突问题

在这里插入图片描述

解决办法:https://blog.csdn.net/hadues/article/details/123753888

三、Swagger的配置

  • Swagger配置信息
@Configuration
@EnableSwagger2      //开启Swagger2
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

    //配置Swagegr信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("张楷涛","https://blog.csdn.net/Littewood?type=blog","abc@qq.com");
        return new ApiInfo(
                "张楷涛的SwaggerAPI文档",
                "萤火之光,褶褶生辉",
                "1.0",
                "https://blog.csdn.net/Littewood?type=blog",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }

在这里插入图片描述

在这里插入图片描述

四、Swagger配置扫描接口

Docker.select()

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //.enable(false)   //是否启用swagger,如果为false,则swagger不能再浏览器中访问
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                .apis(RequestHandlerSelectors.basePackage("com.zkt.controller"))

                //basePackage():指定要扫描的包
                //any():扫描全部
                //none():不扫描
                //withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象,即如果类上游这个注解就会被扫描
                //withMethodAnnotation:扫描方法上的注解
                //------------------------------------
                //paths():过滤路径
//                .paths(PathSelectors.ant("/zkt/**"))
                .build()
            ;
    }

在这里插入图片描述

如果要在开发环境下显示swagger而在生产环境下关闭swagger要怎么实现

  • 配置文件中设置开发环境

在这里插入图片描述

  • swagger配置文件中进行设置
@Configuration
@EnableSwagger2      //开启Swagger2
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){

        //获取项目环境

        //设置要显示的swagger环境
        Profiles profiles = Profiles.of("dev");
        boolean flag = environment.acceptsProfiles(profiles);


        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(flag)   //是否启用swagger,如果为false,则swagger不能再浏览器中访问
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                .apis(RequestHandlerSelectors.basePackage("com.zkt.controller"))

                //basePackage():指定要扫描的包
                //any():扫描全部
                //none():不扫描
                //withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象,即如果类上游这个注解就会被扫描
                //withMethodAnnotation:扫描方法上的注解
                //------------------------------------
                //paths():过滤路径
//                .paths(PathSelectors.ant("/zkt/**"))
                .build()
            ;
    }

    //配置Swagegr信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("张楷涛","https://blog.csdn.net/Littewood?type=blog","892640297@");
        return new ApiInfo(
                "张楷涛的SwaggerAPI文档",
                "萤火之光,褶褶生辉",
                "1.0",
                "https://blog.csdn.net/Littewood?type=blog",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}

在这里插入图片描述

五、分组和接口注释

配置API文档的分组

.groupName()

在这里插入图片描述

如果需要配置多个分组,则新建Bean

    @Bean
    public Docket docket1() {
        return new Docket(DocumentationType.SWAGGER_2).groupName("张三");
    }
    @Bean
    public Docket docket2() {
        return new Docket(DocumentationType.SWAGGER_2).groupName("李四");
    }

在这里插入图片描述

在这里插入图片描述

注解

@ApiModel()

#为实体类添加注释,在Swagger中显示

#为实体类添加注释,在Swagger中显示
@ApiModel("用户实体类")


在这里插入图片描述
在这里插入图片描述

@ApiModelProperty()

@ApiModelProperty(“用户名”):为实体类中的属性添加注释,在Swagger中显示

用在属性上,描述响应类的属性

value–字段说明;name–重写属性名字;dataType–重写属性类型;required–是否必填;example–举例说明;hidden–隐藏

@ApiModelProperty(value = “请求返回code说明,0-成功,1-失败”,required = true,example = “0”)

@ApiModel("用户实体类")
public class User {


    @ApiModelProperty("用户名")
    private String username;
    @ApiModelProperty("密码")
    private String password;
    

在这里插入图片描述

如果实体类属性被private修饰,需要有get和set方法

在这里插入图片描述

@Api()

@Api用在请求的类上,表示对类的说明(Controller层)

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

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

在这里插入图片描述

在这里插入图片描述

@ApiOperation()

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

@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response =“接口返回参数类型”, notes = “接口发布说明”;

在这里插入图片描述

在这里插入图片描述

@ApiParam()

@ApiParam用于接口处表明需要的参数声明

在这里插入图片描述

在这里插入图片描述

六、总结

  • 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
  • 接口文档实时更新
  • 可以在线测试

【注意】在正式发布的时候,关闭Swagger!处于安全考虑,而且节省运行的内存。

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

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

相关文章

Axure 原型中的迭代设计

​“老师&#xff0c;什么是产品迭代&#xff1f;” “老师。产品迭代和平常的产品设计有什么不同吗&#xff1f;” “老师&#xff0c;产品迭代原型可以怎么做&#xff1f;需要全部重新绘制吗&#xff1f;” 在和小伙伴们的日常交流中&#xff0c;不乏对产品迭代存在疑惑的朋…

2023年,数据人谨记把握好这“四不要”和“四要”

2023年已经开启&#xff0c;这一年对任何组织数据治理的工作都是非常重要的&#xff0c;那么我们如何更好的掌握数据治理和应对数据治理项目就成为重中之重&#xff0c;下面就和大家谈谈数据治理学习和项目的一些心得体会&#xff0c;供大家参考。 不要相互割裂&#xff0c;要融…

VS Code配置snippets代码片段快速生成html模板,提高前端编写效率

先看下示例&#xff0c;在输入 ! 号回车后自动生成一段代码片段。 这样我们就可以更便捷的进行代码编写了。 配置方法如下&#xff1a; 然后找到对应的文件进行配置&#xff0c;例如 html.json&#xff0c;编写 .html 扩展名文件时就能触发。 我这选的 html.json 进行的配置…

CSS选择器整理学习(下)

书接上回&#xff0c;在前端项目开发中&#xff0c;有时候需要对特殊的元素进行特殊的处理&#xff0c;但有时候元素的位置不确定、层级不确定、数量不确定等问题&#xff0c;导致我们没办法进行元素的选择&#xff0c;这个时候我们就需要用到元素选择器了。 一、css选择器 1…

ESP-IDF:懒汉式和饿汉式单例模式测试代码

ESP-IDF:懒汉式和饿汉式单例模式测试代码 /单例模式测试/ /懒汉式/ class singleton_lazy { private: singleton_lazy(){}; public: static singleton_lazy *getinstance(){ if (pSingleton NULL){ pSingleton new singleton_lazy; } return pSingleton; } private: stati…

美摄云剪辑3.0:融合AIGC,实现效率提升

云剪辑3.0亮点速览 数字人视频一键生成本地素材剪辑无需等待上传支持Lottie动画导入01 模板化包装&#xff0c;一键生成数字人视频 伴随元宇宙技术的发展和产业数字化升级&#xff0c;数字人正在成为下一代互联网的基础设施。与此同时&#xff0c;AI的应用场景也愈加丰富。人…

网站被劫持的解决方案

网站被劫持怎么解决?用户打开网站就发现网站被篡改不是自己原来的页面&#xff0c;而是被变成被劫持的页面&#xff0c;以下几种情况以及对应的处理方法&#xff0c;一起来看看吧。 一、DNS劫持 DNS劫持是一种恶意攻击&#xff0c;其中&#xff0c;个人通过覆盖计算机的传输控…

TCP/IP详解与实例分析

TCP/IP详解 TCP/IP并不是一个具体的协议&#xff0c;而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇&#xff0c;只是因为在TCP/IP协议中TCP协议和IP协议最具代表性&#xff0c;所以被称为TCP/IP协议。 TCP/IP协议在一定程度上参考了OSI的体系结构&#xff0c;在TCP/…

前端面试题2023含答案 前端必备知识点 混淆 刷题 查漏补缺【持续更新中】

目录1. vue双向数据绑定&#xff08;响应式&#xff09;原理2. HTML 语义化&#xff08;语义化标签&#xff09;3. 标签上 title 与 alt 属性4. CSS单位&#xff1a;1px、1em、1rem、1vh / 1vw 的含义5. 网页前端性能优化的方式6. HTTP常见的状态码7. Vuex是什么&#xff08;有…

基于卡尔曼滤波器的PID控制-2

采用Simulink进行仿真&#xff01;&#xff01;Kalman算法由M函数实现。控制干扰信号wk)和测量噪声信号v(k)幅值均为0.10的白噪声信号&#xff0c;输入信号幅值为1.0、频率为0.5Hz 的正弦信号。采用卡尔曼滤波器实现信号的滤波,取O1&#xff0c;R1。仿真结果如图1和2所示。图1 …

PyQt5编程基础 2.1 GUI程序的基本框架

文章目录 创建纯代码GUI程序 创建目录 新建程序 创建GUI程序的基本过程(代码分析) 导入模块 创建应用程序 创建窗体 使用窗体类的GUI程序框架 创建项目目录 窗体设计 修改窗体的windowTitle 放一个label 放一个Push Button 保存窗体 代码设计 将QtApp中的ui文…

【自学Docker】Docker update命令

Docker update命令 大纲 docker update命令教程 docker update 命令可以用于更新一个或多个 Docker容器 的配置。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker update命令语法 haicoder(www.haicoder.net)# docker update [OPTIONS] CONTAINER […

网络编程套接字之UDP实现回显服务器及客户端

目录 前言&#xff1a; 基础理解 传输层协议 UDP TCP Socket API DatagramSocket API DatagramPacket API UDP实现回显服务器 完整代码展现&#xff08;有详细注释&#xff09; UDP实现回显客户端 完整代码展现&#xff08;有详细注释&#xff09; 小结&#xff1…

使用OpenCV对点集从左上到右下排序

本文实现如何使用OpenCV对点集从左上到右下排序。本文使用的案例图片如下&#xff1a; 需要实现的效果如下&#xff1a; 1.分阶段实现 让我们看看考虑4行的工作流。我考虑的是沿着y轴将图像分成4段&#xff0c;形成4行。对于图像的每一段&#xff0c;找出每一个以该段为中心…

虚拟主机怎么用?香港虚拟主机搭建网站教程

在了解使用方法之前要先明白什么是虚拟主机、它的用处以及服务器、VPS和虚拟主机之间有什么区别。香港虚拟主机也称为网站空间&#xff0c;顾名思义就是存放网站文件的空间。主要用于搭建网站、提供程序运行。下面就介绍一下香港虚拟主机搭建网站的使用方法以及教程。 一、香港…

职场新人应该如何培养项目管理的能力?

李强在一家企业工作&#xff0c;前阵子升任项目经理。但他这两天却一副愁眉不展的样子&#xff0c;像霜打的茄子。原来是因为他缺乏管理经验&#xff0c;设定的工作任务不合理&#xff0c;项目成员职责不清&#xff0c;导致项目混乱&#xff0c;项目进度不清晰。 项目管理涉及…

Redis搭建基于docker跨服务器的一主两从三哨兵集群模式

文章目录1 整体拓扑图2 redis与哨兵配置文件2.1 主节点配置文件2.1.1 主节点redis.conf配置文件2.1.2 主节点哨兵配置文件2.2 从节点配置文件2.1.1 从节点redis.conf配置文件2.1.2 从节点哨兵配置文件3 docke-compose编排文件4 启动并测试查看哨兵日志查看集群状态测试集群是否…

在 Visual Studio 中更好地进行搜索

当在 IDE 中查找特定的代码文件、类、方法或者功能、选项&#xff0c;找到它们并不总是那么容易。有多种搜索方式&#xff0c;到底该选择哪一种才最便捷呢&#xff1f;新的“一站式”搜索&#xff08;All-In-One Search&#xff09;将代码和功能搜索合并到同一个 UI 中&#xf…

从GPT到chatGPT(三):GPT3(一)

#GPT3 文章目录前言正文摘要介绍方法模型结构训练数据集训练过程评估小结前言 OpenAI在放出GPT2后&#xff0c;并没有引起业界太大的影响和关注&#xff0c;究其原因&#xff0c;并不是zero-shot这种想法不够吸引人&#xff0c;而是GPT2表现出来的效果依然差强人意&#xff0c…

Unity数据持久化-PlayerPrefs

1. PlayerPrefs 是什么&#xff1f; 是Unity提供的可以用于存储读取玩家数据的公共类 1.1. 存储相关 PlayerPrefs的数据存储类似于键值对存储 一个键对应一个值 提供了存储3种数据的方法int float string 键:string类型 值: int float string对应3种API PlayerPrefs.SetInt(…