Swagger2总结(Swagger2引入、Spring-Swagger2整合、Swagger2常用注解与插件)-程序员宅基地

技术标签: spring  Java  # 框架演进  java  前端  

1 Swagger2

1.1 Swagger2简介

Swagger2–自动生成接口文档

优点:

  1. 代码变,文档变。只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,很好的保证了文档的时效性。

  2. 跨语言性,支持 40 多种语言。

  3. Swagger UI 呈现出来的是一份可交互式的 API 文档,我们可以直接在文档页面尝试 API 的调用,省去了准备复杂的调用参数的过程。

  4. 还可以将文档规范导入相关的工具(例如 Postman、SoapUI), 这些工具将会为我们自动地创建自动化测试。
    Swagger是一套围绕Open API 规范构建的开源工具,可以帮助设计,构建,记录和使用REST API。

1.1 Swagger2引入

前后端分离:

  • 后端:后端控制层,服务层,数据访问层【后端团队】

  • 前端:前端控制层,视图层【前端团队】

    • 伪造后端数据 Json,不需要后端,程序依旧能运行
  • 前后端如何交互?===> API

  • 前后端相对独立,松耦合

  • 前后端甚至可以部署在不同的服务器上

  • 后端提供接口,需要实时更新最新的消息及改动!

前后端分离产生一个问题:

  • 前后端继承联调,前端人员和后端人员无法做到,及时协商,尽早解决。最终导致问题集中爆发!

解决方案:

  • 指定一个schema (计划或理论的提要,纲要)实时更新最新的API,降低集成的风险

  • 早些年:制定world计划文档。

  • 前后端分离:

    • 前端测试后端接口:postman
      • 后端提供接口,需要实时更新到最新的消息及改动。

接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变成重中之重。接口文档固然重要,但是由于项目周期等原因后端人员经常出现无法及时更新,导致前端人员抱怨接口文档和实际情况不一致。

很多程序员会抱怨别人写的接口文档不规范,不及时更新。但自己写的时候也觉得烦——太痛苦了。如果接口文档可以实时动态生成就不会出现上面问题。

Swagger可以完美解决上面的问题。

1.2 Swagger 工具包括的组件

Swagger 工具包括的组件:

  • Swagger Editor:基于浏览器编辑器,可以在里面编写Open API规范。类似Markdown具有实时预览描述文件的功能。(用的比较少,自定义配置时才用)
  • Swagger UI: 将Open API 规范呈现为交互式API文档。用可视化 UI展示描述文件。(通过浏览器,根据代码中的 注解 查看)
  • Swagger Codegen:将OpenAPI 规范成为服务器存根(可以生成文件,方便访问服务器信息,快速展示)和客户端库。通过Swagger Codegen 可以将描述文件生成html格式和cwiki形式的文档接口,同时也可以生成多种言语的客户端和服务段代码。
  • Swagger Inspector:和Swagger UI有点类似,但是可以返回更多信息(多了过程记录),也会保存请求时及参数数据。
  • Swagger Hub:继集成了上面所有项目的各个功能,你可以以项目和版本为单位,将你的描述文件上传到Swagger Hub 中可以帮助完成上面项目的所有工作,需要注册账号,分免费版和收费版。

使用Swagger,就是把相关信息存储在它定义的描述文件里面(ymljson格式),再通过维护整个描述文件可以去更新接口文档,以及生成各端代码。

  • Swagger号称世界上最流行的Api框架
  • 通过Swagger给一些比较难理解的属性或者接口添加注释信息
  • Rest Api 文档在线自动生成工具 -> Api文档与Api定义实时更新
  • 直接运行,可以在线测试API接口
  • 支撑多种语言:(Java,PHP…)

2 Spring整合使用Swagger2

2.1 导入依赖

<!-- swagger依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>

<!-- swagger ui依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

2.2 Swagger2Config配置类

@Configuration
@EnableSwagger2
public class Swagger2Config {
    
    @Bean
    public Docket getDocket(){
    
        //创建Docket对象
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(getApiInfo())//指定API接口文件首页信息
                .select()//初始化并返回一个API选择构造器
                .apis(RequestHandlerSelectors.any())//为任何接口生成API文档
                .paths(PathSelectors.any())//可以根据url路径设置哪些请求加入文档,忽略哪些请求
                .build(); //创建API文档
        return docket;
    }
    private ApiInfo getApiInfo(){
    
        //创建作者 对象
        Contact contact = new Contact("尼古拉斯","http://www.baidu.com","[email protected]");
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("《麦淘乐后端接口文档》") //文档标题
                .description("文档的描述信息...")//文档描述
                .contact(contact)//文档作者
                .version("V1.0")//文档版本
                .build(); //构建
        return apiInfo;
    }
}

2.3 测试

启动SpringBoot项目访问:http://localhost:8888/swagger-ui.html

3 Swagger2常用注解

3.1 Controller注解

  • @Api:修饰整个类,描述Controller的作用
    • tags:“说明该类的作用”
@RestController
@RequestMapping("users")
@Api(tags = "用户管理API")
public class UserController {
    
    //TODO
}

3.2 方法注解

  • @ApiOperation:描述一个类的一个方法(一个接口)
    • value=“说明方法的作用”
    • notes=“方法的备注说明”
  • @ApiImplicitParams:描述由多个 @ApiImplicitParam 注解的参数组成的请求参数列表
  • @ApiImplicitParam :描述一个请求参数,可以配置参数的中文含义,还可以给参数设置默认值
    • name:参数名
    • value:参数的汉字说明、解释
    • required:参数是否必须传
    • dataType :参数类型,默认String,其它值dataType=“int”
    • defaultValue:参数的默认值
    • paramType:参数放在哪个地方
      • header --> 请求参数的获取:@RequestHeader
      • query --> 请求参数的获取:@RequestParam
      • path(用于restful接口)–> 请求参数的获取:@PathVariable
      • body(请求体)–> @RequestBody User user
      • form(普通表单提交)
@ApiOperation(value="用户登录",notes="备注:手机号码唯一")
@ApiImplicitParams({
    
        @ApiImplicitParam(name="mobile",value="手机号",required=true),
        @ApiImplicitParam(name="password",value="密码",required=true)
})
@PostMapping("/login")
public ResultVO login(@RequestParam String mobile, @RequestParam String password){
    
    //TODO
}

3.3 实体类注解

  • @ApiModel:用对象来接收参数时,用于描述对象(实体类中的注解)
    • (这种一般用在post创建的时候,使用 @RequestBody 这样的场景,请求参数无法使用 @ApiImplicitParam 注解进行描述的时候 )
  • @ApiProperty:用对象接收参数时,描述对象的一个字段(实体类中属性的注解)
@Data
@NoArgsConstructor
@AllArgsConstructor
                                     
    @ApiModelProperty(value = "用户ID",example = "1")
    private Integer id;
    @ApiModelProperty(value = "登录账户",example = "1")
    private String username;
    @ApiModelProperty(value = "账户密码",example = "1")
    private String password;
}

3.4 方法返回值注解

  • @ApiResponses:方法返回对象的说明
    • @ApiResponse:每个参数的说明
      • code:数字,例如400
      • message:信息,例如"请求参数没填好"
@ApiResponses({
    
    @ApiResponse(code = 200,message = "请求成功"),
    @ApiResponse(code = 201,message = "请求失败,参数错误"),
    @ApiResponse(code = 202,message = "请求失败,未知错误")
})

3.5 忽略方法

  • @ApiIgnore:接口方法注解,添加此注解的方法将不会生成到接口文档中

3.6 swagger-ui插件

导入依赖

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.6</version>
</dependency>

访问地址:http://localhost:8888//swagger-ui.html

3.7拦截器放行swagger2资源

.excludePathPatterns("/swagger-ui.html","/webjars/**","/swagger-resources/**","/v2/**");
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yinying293/article/details/130631064

智能推荐

go上传文件-程序员宅基地

文章浏览阅读102次。【代码】go上传文件。

【转】目前常用AD/DA芯片简介_分辨率0.5的ad芯片-程序员宅基地

文章浏览阅读2.9k次。_分辨率0.5的ad芯片

一个简单的dw网页制作作业,学生个人html静态网页制作成品代码——怪盗基德动漫主题网页成品(15页)_dw简单网页制作成品-程序员宅基地

文章浏览阅读6.9k次,点赞6次,收藏57次。精彩专栏推荐 【作者主页——获取更多优质源码】 【web前端期末大作业——毕设项目精品实战案例(1000套)】1 网页简介:此作品为学生个人主页网页设计题材,HTML+CSS 布局制作,web前端期末大作业,大学生网页设计作业源码,这是一个不错的网页制作,画面精明,代码为简单学生水平, 非常适合初学者学习使用。2.网页编辑:网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Web..._dw简单网页制作成品

Android TBS X5内核 64位手机无法加载x5(libmttwebview.so is 32-bit instead of 64-bit)_libmtttrace.so-程序员宅基地

文章浏览阅读3k次。前言这个问题之前出现过但是稀里糊涂的解决了 没有记录详细的解决方案今天又碰到了 自己研究了一天刚刚找到解决方案错误提示dlopen failed: "/system/app/googlewebview85/lib/arm/libwebviewchromium.so“ is 32-bit instead of 64在使用tbs x5内核时 一直崩溃说没有64位的.so包腾讯官方TBS的文档也有这方面的知识点 但是没有解决方案需要靠自己摸索 你说气人不?新版本SDK已支持64位,请更新至官网_libmtttrace.so

java玫瑰花代码_java程序员不一样浪漫,表白玫瑰花送给你的那个她-程序员宅基地

文章浏览阅读3k次。原标题:java程序员不一样浪漫,表白玫瑰花送给你的那个她这篇文章主要讲解了Java版给爱人表白的玫瑰花程序代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧 小编推荐一个学Java的学习裙【二零二,二五零,一九四】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有很多干货和技术分享!1 书写表白语句的frame(渐入功能)?1234567891011..._java玫瑰花代码

Hibernate(映射继承关系、 Hibernate 检索策略、Hibernate 检索方式HQL (迫切)左外连接HQL (迫切)内连接QBC 检索和本地 SQL 检索二级缓存,管理session_hql 非空约束-程序员宅基地

文章浏览阅读203次。上一篇映射继承关系Hibernate支持三种继承映射策略:使用 subclass 进行映射:将域模型中的每一个实体对象映射到一个独立的表中,也就是说不用在关系数据模型中考虑域模型中的继承关系和多态。使用 joined-subclass 进行映射: 对于继承关系中的子类使用同一个表,这就需要在数据库表中增加额外的区分子类类型的字段。使用 union-subclass 进行映射:域模型中的每个类映射到一个表,通过关系数据模型中的外键来描述表之间的继承关系。这也就相当于按照域模型的结构来建立数据库中的_hql 非空约束

随便推点

成为JavaGC专家Part II:如何监控Java垃圾回收机制-程序员宅基地

文章浏览阅读215次。 成为JavaGC专家Part II :如何监控Java垃圾回收机制 本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。 在本文中,我将解释JVM到底是如何执行垃圾回收处理..._成为javagc专家part ii — 如何监控java垃圾回收机制。

python学习导航线_python点线导航-程序员宅基地

文章浏览阅读122次。文章目录python学习导航线一、seleniumpython-selenium二、python基础知识python的聊天室python学习导航线一、seleniumpython-selenium二、python基础知识python的聊天室_python点线导航

静态成员-静态成员变量-程序员宅基地

文章浏览阅读3.4k次,点赞4次,收藏22次。静态成员静态成员都是用static修饰,它的特点是不论创建多少个对象,程序都只创建一个静态成员。最主要的特点:共享什么是共享呢?例如:统计超市中所有商品数量的总和,商品数量的总和是随着每一个数量的变化而变化的,这是我们就可以用静态成员处理。(代码下面有写)静态成员又分为静态成员变量和静态成员函数。(一)静态成员变量特点:1、所有对象共享一份数据。 2、在编译阶段分配内存。 3、类内声明,类外初始化。#include<io..._静态成员变量

HTML5七夕情人节表白网页制作【情人节满屏爱心HTML5特效】HTML+CSS+JavaScript html生日快乐祝福网页制作_html 满屏爱心-程序员宅基地

文章浏览阅读879次,点赞21次,收藏20次。1 网页简介:基于HTML+CSS+JavaScript 制作七夕情人节表白网页、生日祝福、七夕告白、 求婚、浪漫爱情3D相册、炫酷代码,快来制作一款高端的表白网页送(他/她)浪漫的告白,制作修改简单,可自行更换背景音乐,文字和图片即可使用等任意html编辑软件进行运行及修改编辑等操作)。_html 满屏爱心

【易飞】易飞ERP自动审核程序功能_易飞单据审批设置-程序员宅基地

文章浏览阅读492次,点赞9次,收藏5次。【代码】【易飞】易飞ERP自动审核程序功能。_易飞单据审批设置

青少年CTF擂台挑战赛 2024 #Round 1_xyctf高校新生联合赛 2024-程序员宅基地

文章浏览阅读1.6k次,点赞15次,收藏30次。文件打开是一个print数组v4的地址和read函数,并且nx好像可写,输入长度可以利用,进行一个栈上写好自己的shell,然后在构造一个回到v4的地址,这样子就可以重新读取到写buf段上的shell,这里要注意shell的隔断用/00截断然后构造好栈上数据。一个sql注入题目,尝试使用二分查找,但只能爆出表名和列名,值一直出不来,后来采用布尔盲注,fuzz测试后发现没有加任何过滤,直接写脚本。第二题:为了求解方程 (5 + sqrt{x} = 8),我们可以分离平方根项,然后求解 (x)。_xyctf高校新生联合赛 2024

推荐文章

热门文章

相关标签