swagger2接口文档

news2024/11/26 0:02:01

文章目录

    • 简介
    • Open API
    • Swagger简介
    • Spring-fox
    • 入门案例
      • 第一步:导入依赖
      • 第二步:编写controller类
      • 第三步:编写启动类
      • 第四步:运行启动类并访问ui页面
    • Swagger UI 介绍
    • 基础信息配置
    • 自定义注解(防止有些类不生成接口文档)
    • 配置-不想被写入接口文档中的方法
    • 配置-controller前缀为xx的才被写入接口文档
    • 常用注解
      • ApiModel和ApiModelProperty

简介

前后端使用的接口文档,如前端访问后端哪个接口、得到的哪个参数等等

前台人员写登录页面 /login 有两个参数 username pswd

后台人员写登录页面/dologin 参数名称 username password

前台后台要不断的更新自己的内容去配合,这就很麻烦,因为每个人的开发习惯不一样

接口文档:请求地址 端口 参数有几个 都是什么类型 返回结果有哪些…,但是文档更新不及时

swagger:能够根据代码动态的生成接口


Open API

是一种规范,以前叫做Swagger规范是REST API的API描述格式

Open API 文件描述整个API,包括:

​ 1、每个访问地址的类型 : POST和GET…

​ 2、每个操作的参数 : 输入输出参数

​ 3、认证方法 :有没有加密

​ 4、连接信息、声明、使用团队和其他信息

Open API 规范可以使用YAML或者JSON格式进行编写,这样更有利于我们和机器进行阅读

OpenAPI规范(OAS)为REST API定义了一个与语言无关的标准接口


Swagger简介

是一套围绕Open API规范构建的开源工具,可以帮助设计、构建、记录和使用REST API ,专门做Open API具体实现的

Swagger工具包括的组件:

​ Swagger Editor : 相对用的少 ,偶然在配置中出现,文档的定制化编写,基于浏览器编辑器,类似Markdown,程序员还得手写

Swagger UI:将代码中嵌入的Swagger内容(注解)读出,将Open API规范呈现为交互式API文档,用可视化UI展示描述文件,用浏览器查看

​ Swagger Codegen:将OpenAPI规范生成为服务器存根和客户端库,客户端库一般就是html格式或者cwiki形式而服务器存根一般是各种代码

​ Swagger Inspector:类似于UI ,但是加了过程记录,用的少

​ Swagger Hub:集成上面所有的功能,可以以项目和版本为单位,将描述文件上传到Swagger Hub中,在Swagger Hub中可以完成上面项目的所有工作,类似GitHub

使用Swagger

将描述信息写成yml或者json格式,然后通过UI观看,根据代码的变化改变yml或者json中的内容去更新文档


Spring-fox

是Swagger的一种加强

使用Swagger时如果碰见版本更新或者迭代时,需要修改Swagger的描述文件,也就是yml或者json格式,但是这也是一种工作负担,所以出现了Springfox来自动修改,通过注解来写一个描述文件最后生成一个接口文档。 ‘

Spring-fox是在spring的组件swagger-springmvc中发展而来的组件,但是它不是spring旗下的,可以根据代码生成,主要使用AOP技术,将swagger集成进来,底层还是Swagger

实际开发中都是使用spring-fox+swagger来配合使用


入门案例

第一步:导入依赖

 <!--管理springboot-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.12.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <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>
    </dependencies>

第二步:编写controller类

@RestController
public class DemoController {
    @PostMapping("/post")
    public String post(){
        return "post";
    }
    @GetMapping("/get")
    public String get(String a,String b){
        return "get";
    }
    @RequestMapping("/login")
    public String login(String name){
        return "name";
    }
}

第三步:编写启动类

@EnableSwagger2 是springfox提供的一个注解,代表swagger2相关技术开启,会扫描当前类所在包,及子包中所有的类型中的注解,做swagger文档的定值

@SpringBootApplication
@EnableSwagger2
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class,args);
    }
}

第四步:运行启动类并访问ui页面

localhost:8080/swagger-ui.html


Swagger UI 介绍

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-br8kFhIZ-1675481160322)(.\swagger2.assets\1672112512021.png)]



基础信息配置

使用配置类+注解来配置一个基础信息的配置

创建一个Docket类型的对象,并使用spring容器管理,Docket是Swagger中的全局配置对象

设置文档名称、网站地址、邮箱、标题、描述、版本、扫描包所在位置。

apis是一套规则,不止是下面的规则,还有很多。

@Configuration
public class swaggerAPIInfo {
    @Bean
    public Docket docket(){

        // 创建Swagger全局对象并指定使用哪个版本的
        Docket docket = new Docket(DocumentationType.SWAGGER_2);

        // 创建API帮助文档的描述信息
        ApiInfo apiInfo = new ApiInfoBuilder()
                // 配置Swagger文档主体内容
                .contact(
                        new Contact("南方有橘 - wanwan",   // 文档的发布者名称
                                "http://localhost:8080", // 文档发布者的网站地址   企业地址
                                "2523318777@qq.com") // 文档发布者的电子邮箱
                )
                .title("Swagger框架学习帮助文档")
                .description("Swagger框架学习帮助文档详细描述-Swagger框架是一个用于开发RestAPI帮助文档的框架")
                .version("1.1")
                .build();

        // 给docket上下文配置api描述信息
        docket.apiInfo(apiInfo);

        // 配置Swagger扫描包
        docket = docket
                .select()  // 获得Docket中的选择器,返回APISelectorBuilder  如:扫描什么包下的注解
                .apis( // 返回true然后取反为false最后就不会展示在文档上
                        Predicates.and(
                                Predicates.not(  // 取反  将false=>true
                                        // 当方法上有该MyAnnotation4Swagger注解的时候返回true
                                        RequestHandlerSelectors.withMethodAnnotation(MyAnnotation4Swagger.class)
                                ),
                                RequestHandlerSelectors.basePackage("com.ww.swaggerDemo.Controller") // 设定扫描哪个包中的注解
                        )

                )
                .build(); // 重新构建
        return docket;
    }
}

自定义注解(防止有些类不生成接口文档)

@Target 描述当前的注解可以定义在什么资源上。

属性 value

  • 定义具体的资源 包括:
    • ElementType.METHOD 可以定义在方法上
    • ElementType.TYPE 可以定义在类型上
    • ElementType.FIELD 可以定义在属性上
    • ElementType.PARAMETER 可以定义在方法参数上

@Retention 当前注解在什么时候有效

属性 value

  • 定义具体的生效标记
    • RetentionPolicy.RUNTIME 运行时有效
    • RetentionPolicy.SOURCE 源码中有效
    • RetentionPolicy.CLASS 字节码中有效
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation4Swagger {
    //自定义注解中的属性
    String value() default "";
}

配置-不想被写入接口文档中的方法

当在生成接口文档的时候,有些方法不想被写入接口文档中,这个时候就需要在配置类中进行规则的配置
在这里插入图片描述


配置-controller前缀为xx的才被写入接口文档

controller方法中只有以/swagger或者/swagger1 开头的才能生成接口文档
在这里插入图片描述


常用注解

类 - @Api(tags = {"别名1" , "别名2"}) 生成帮助文档的信息,定义多个别名则出现多个名字不同但是所拥有的方法相同的文档

在这里插入图片描述

方法 - @ApiOperation(value="方法标题",notes="方法描述")

在这里插入图片描述

方法参数 - @ApiParam(name="参数名称",value="参数描述",required=是否必须......) String a

在这里插入图片描述

忽略生成接口文档 @ApiIgnore

跟之前自己在配置类中进行的配置一样,所以之前的那个配置类中的配置可以不用,转而用这个注解

在这里插入图片描述

方法参数 - @ApiImplicitParams(

value={ @ApiImplicitParam(name="参数名",value=“参数描述”,required=是否必要,paramType=“参数类型(如:字符串)”,dataType=“数据类型”) , @ApiImplicitParam()})

也可以单独写 @ApiImplicitParam

在这里插入图片描述


ApiModel和ApiModelProperty

用在方法返回值为实体类的情况

@ApiModel(value = "实体类Entiy",description = "这个实体类用来收集用户的信息")
public class entiy implements Serializable {
    @ApiModelProperty(name = "主键",value = "主键id",required = false,example = "1")
    private String id;
    @ApiModelProperty(name = "用户名",value = "用户名name",required = true,example = "张三")
    private String name;
    @ApiModelProperty(name = "密码",value = "密码pwd",required = true,example = "admin")
    private String pwd;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }


}

在这里插入图片描述

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

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

相关文章

数据结构:数组及特殊矩阵

数组及特殊矩阵一、认识数组1️⃣ 定义2️⃣ 存储结构1. 一维数组2. 二维数组二、特殊矩阵的压缩存储1️⃣ 对称矩阵&#x1f4a4;思考1&#xff1a;有多少个二维元素A[0...n-1][0...n-1]存于一维元素中❓&#x1f4a4;思考2&#xff1a;按行排列&#xff0c;二维数组A[0...n-1…

198分成功上岸浙江工业大学MBA的备考经验分享

我是2022年刚被浙江工业大学MBA项目录取的一名新生&#xff0c;新的一年管理类联考备考已经开始&#xff0c;最近身边有很多小伙伴也都在咨询这方面的信息&#xff0c;趁着今天有空给大家分享下我的经验。 在备考开始之前首先要确定目标&#xff0c;因为工作在杭州&#…

【正点原子Linux连载】第四章 SDK包的使用 摘自【正点原子】ATK-DLRV1126系统开发手册

1&#xff09;实验平台&#xff1a;正点原子RV1126 Linux开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692176265749 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第四章 S…

学习周报-20230203

文章目录一 在rhel7系统使用Mariadb一 联系和区别二 需求三 部署安装3.1 环境准备3.2 安装软件包3.3 启动服务3.4 设置防火墙策略四 创建用户和库表4.1 登录数据库4.2 创建用户4.3 创建数据库和表五 备份和恢复5.1 备份 com 数据库5.2 模拟误删除操作5.3 恢复表二 使用grep忽略…

如何建立异形板框的内缩和外扩

如何建立异形板框的内缩和外扩 首先把需要内缩和外扩的外形图设置在信号层&#xff08;比如TOP&#xff09;&#xff0c;把线宽改为0mil&#xff08;方便计算&#xff09;。然后选择外形图&#xff0c;执行命令TJ&#xff0c;就可以得到内缩和外扩图形。然后把生成的图形修改到…

Linux-查找文件、软链接、打包压缩和软件安装

查找文件find软链接ln打包和压缩tar软件安装apt-get1.查找文件find命令功能强大&#xff0c;通常用来在特定的目录下搜索符合条件的文件序号命令作用01find[路径] -name"*.py"查找指定路径下扩展名是.py的文件&#xff0c;包括子目录如果省略路径&#xff0c;表示在当…

最新整理Spring面试题2023

Spring面试专题 1.Spring应该很熟悉吧&#xff1f;来介绍下你的Spring的理解 有些同学可能会抢答&#xff0c;不熟悉!!! 好了&#xff0c;不开玩笑&#xff0c;面对这个问题我们应该怎么来回答呢&#xff1f;我们给大家梳理这个几个维度来回答 1.1 Spring的发展历程 先介绍…

【C++入门】引用详解(引用的特性、引用的使用、引用与指针的区别)

文章目录1 引用概念2 引用特性3 使用场景4 常引用5 传值与传引用的效率比较5.1 值和引用作为函数参数的性能比较5.2 值和引用作为返回值类型的性能比较6 引用和指针的区别1 引用概念 引用不是新定义一个变量&#xff0c;而是给已存在的变量取了一个别名&#xff0c;编译器不会为…

浅谈网络流

网络 网络是一张单向图 , 每条边都有一个权值 c(u,v)c(u,v)c(u,v) 表示边 (u,v)(u,v)(u,v) 的容量. 特别的 , 图上有源点 (s)(s)(s) 和汇点 (t)(t)(t). 网络流 在一张网络上 , 从源点流出 , 最终流入汇点的流. f(u,v)f(u,v)f(u,v) 表示 (u,v)(u,v)(u,v) 的流量. 满足 : 容…

【测试总结系列-1】质量保障之测试左移和右移

在开发一个系统或者说软件&#xff0c;需求分析、软件设计、程序编码、软件测试、运行维护&#xff0c;这些阶段必不可少。整个周期中&#xff0c;作为测试人员&#xff0c;不是只在测试阶段才能发挥作用&#xff0c;也不是仅有测试对软件质量负责&#xff0c;一个项目团队&…

关于图片上传和在页面显示问题

最近在工作中遇到一个关于图片上传的问题。根据之前项目的经验&#xff0c;我知道目前这个公司上传图片有两种方式&#xff0c; 一种是把图片上传到公司服务器上&#xff0c;然后把图片放在服务器上的地址存在数据库中&#xff0c;要获得图片的时候直接从库中拿地址就行了另一…

分析网络抓包用 python 更高效

Abstract分析网络抓包用 python 更高效AuthorsWalter FanCategorylearning noteStatusv1.0Updated2023-01-10LicenseCC-BY-NC-ND 4.0 网络抓包分析用的最多的两大工具是 tcpdump 和 wireshark. 一般我们通过 tcpdump 或者 wireshark 来捕获网络包为 *.pcap 或者 *.pcapng 文件 …

Elasticsearch:在 Elasticsearch 中按距离有效地对地理点进行排序

计算搜索中两点之间的距离有很多用例。 如果你正在处理地理数据&#xff0c;那么无论你从事何种业务&#xff0c;这都必然会出现。 然后&#xff0c;在对这些点进行排序时&#xff0c;你可能需要考虑距离&#xff0c;因为……好吧&#xff0c;为什么不呢&#xff1f; 所以这里…

算法训练营DAY48|121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

这一期到了买卖股票专题&#xff0c;买卖股票的有一些题型&#xff0c;可以使用贪心算法来求解&#xff0c;甚至有时候比动态规划更简单一些&#xff0c;但是本期是讲动态规划的运用&#xff0c;所以不做对于贪心的分析。今天只讲两道例题&#xff0c;其中第二题是第一题的变种…

[NeurIPS 2017] Poincaré Embeddings for Learning Hierarchical Representations

ContentsIntroductionPoincar EmbeddingsThe Limitations of Euclidean Space for Hierarchical DataEmbedding Hierarchies in Hyperbolic SpaceEvaluationReferencesIntroduction 如今&#xff0c;表征学习变得越来越重要 (e.g. word embedding, embeddings of graphs, embe…

如何在电脑上安装 Windows 版桌面编辑器 v7.3

线上编辑器的桌面端版本不需要持续的互联网连接&#xff0c;还可在计算机上处理脱机文件。因此&#xff0c;如果您需要此类功能&#xff0c;可从我们的网站中下载并安装桌面编辑器。 ONLYOFFICE桌面编辑器最新版 最近 ONLYOFFICE 发布了 v7.3&#xff0c;最新版本的桌面编辑器…

SpringBoot+Vue点餐系统

简介&#xff1a;本项目采用了基本的springbootvue设计的点餐。系统。详情请看截图。经测试&#xff0c;本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 项目描述 项目名称SpringBootVue点餐系统源码作者LHL项目类型Java EE项目 &#xff08;前后分离&a…

ESP-IDF:命令模式测试

ESP-IDF:命令模式 /命令模式/ /设计模式之开闭原则&#xff0c;对增加开放对修改关闭/ #include #include class ClientCommands{ //统一管理命令&#xff0c;这是比观察者模式多出来的地方 public: void AddMoney(){ cout<<“add money”<<endl; } void AddEqu…

图解LeetCode——1145. 二叉树着色游戏(难道:中等)

一、题目 有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中&#xff0c;给出二叉树的根节点 root&#xff0c;树上总共有 n 个节点&#xff0c;且 n 为奇数&#xff0c;其中每个节点上的值从 1 到 n 各不相同。 最开始时&#xff1a; 「一号」玩家从 [1, n] 中取一个值…

Ubuntu22.04安装nvidia显卡驱动

Ubuntu22.04安装nvidia显卡驱动 目录 方法一&#xff1a;使用官方的NVIDIA驱动进行手动安装&#xff08;稳定、靠谱&#xff09; 方法二&#xff1a;使用系统自带的“软件和更新”程序-附加驱动更新&#xff08;需要联网&#xff0c;稳定性无法验证&#xff09; 浓缩极简方法…