Spring Boot整合swagger2

在上一篇中我们围绕了Spring Boot 集成了RESTful API项目,但是我们在实际开发中,我们的一个RESTful API有可能就要服务多个不同的开发人员或者开发团队,包括不限于PC,安卓,IOS,甚至现在的鸿蒙OS,web开发等等。为了减少与其他团队平时开发期间的频繁沟通成本,我们一般会选择创建一个相关的文档来记录所有的接口细节,也就是我们常常在实际开发中的接口文档。

  • 但是我们采用接口文档进行记录的时候,发现,由于接口众多,并且他们的细节比较复杂,需要我们考虑不同场景的HTTP请求,甚至HTTP的相关头部信息,内容等,并且我们在创建这样的接口文档的时候,费时费力,很多的时候,我们都统计不全,甚至还会出现错误,这是因为人力统计的时候很容易出现差错,这也很正常。
  • 并且随着时间的增加,我们对系统进行改动,不免也会对相关接口进行改动,这个只要是做过开发的都知道,这里调接口,那里调接口,我们就需要对文档进行修改,但是我们在开发过程中,发现代码和文档处于两个阶级,除非老大有严格的管控,不然就会造成很多问题。

这个时候,我们发现刚好有一种技术可以解决我们的问题,也就是Swagger2,他可以轻松的整合到Spring Boot中,并于Spring MVC 程序配合组织处很强大哦的RESTful API文档,极大的减少了我们创建文档的工作量,同时进一步将内容整合到我们的实现代码中,让代码修改和文档维护成为一体,同时修改,同时记录,让我们在修改代码的同时也修改了文档说明。

此外Swagger2 提供了强大的页面测试功能来调试每个RESTful API。具体效果如下图所示。
在这里插入图片描述

准备工作

我们需要有一个Spring Boot 实现的RESTful API工程,我们在上一篇就以及涉及到了,如果你没有接触过RESTful API,欢迎参照上一篇一起食用更佳。

Spring Boot整合Swagger 2

第一步,添加依赖,老样子,这里就不在详细描述了,如下:

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Springfox Swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> <!-- 请使用最新版本 --></dependency><!-- Springfox Swagger UI --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version> <!-- 请使用最新版本 --></dependency>
</dependencies>

第二步:在Spring Boot的启动类中添加一个@EnableSwagger2Doc 注解,如下:

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

第三步创建一个User实体对象,并给相关实体添加Swagger2 自带的接口,@ApiModel添加到实体类上,@ApiModelProperty添加到具体的属性之上,用于描述具体属性

@ApiModel(description="用户实体")
public class User {@ApiModelProperty("用户编号")private Long id;@ApiModelProperty("用户姓名")private String name;@ApiModelProperty("用户年龄")private Integer age;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

第四步,我们在application.properties文件上配置有关Swagger2的相关属性。

swagger.title=spring-boot-starter-swagger
swagger.description=Starter for swagger 2.x
swagger.version=1.9.0.RELEASE
swagger.license=Apache License, Version 2.0
swagger.licenseUrl=https://www.apache.org/licenses/LICENSE-2.0.html
swagger.termsOfServiceUrl=https://github.com/dyc87112/spring-boot-starter-swagger
swagger.contact.name=miaow
swagger.contact.url=https://luoxiaohei520.github.io
swagger.contact.email=miaow@qq.com
swagger.base-package=com.miaow
swagger.base-path=/**

其中参数的相关含义如下:

swagger.title:标题
swagger.description:描述
swagger.version:版本
swagger.license:许可证
swagger.licenseUrl:许可证URL
swagger.termsOfServiceUrl:服务条款URL
swagger.contact.name:维护人
swagger.contact.url:维护人URL
swagger.contact.email:维护人email
swagger.base-package:swagger扫描的基础包,默认:全扫描
swagger.base-path:需要处理的基础URL规则,默认:/**

更多配置请参照官方文档

此时启动项目,访问链接: http://localhost:8080/swagger-ui.html
发现页面全是英文的。

第五步,我们来对Controller层的相关对象和方法进行API注解说明,在第四步我们发现通过浏览器访问,整个界面都是英文或者遵循代码定义的名称产生的,对用户并不友好,于是我们通过相关注解来给API增加说明:@Api@ApiOperation注解来给API增加说明、通过@ApiImplicitParam@ApiModel@ApiModelProperty注解来给参数增加说明。

@Api(tags = "用户管理")
@RestController
@RequestMapping(value = "/users")     // 通过这里配置使下面的映射都在/users下
public class UserController {// 创建线程安全的Map,模拟users信息的存储static Map<Long, User> users = Collections.synchronizedMap(new HashMap<>());@GetMapping("/")@ApiOperation(value = "获取用户列表")public List<User> getUserList() {List<User> r = new ArrayList<>(users.values());return r;}@PostMapping("/")@ApiOperation(value = "创建用户", notes = "根据User对象创建用户")public String postUser(@RequestBody User user) {users.put(user.getId(), user);return "success";}@GetMapping("/{id}")@ApiOperation(value = "获取用户详细信息", notes = "根据url的id来获取用户详细信息")public User getUser(@PathVariable Long id) {return users.get(id);}@PutMapping("/{id}")@ApiImplicitParam(paramType = "path", dataType = "Long", name = "id", value = "用户编号", required = true, example = "1")@ApiOperation(value = "更新用户详细信息", notes = "根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")public String putUser(@PathVariable Long id, @RequestBody User user) {User u = users.get(id);u.setName(user.getName());u.setAge(user.getAge());users.put(id, u);return "success";}@DeleteMapping("/{id}")@ApiOperation(value = "删除用户", notes = "根据url的id来指定删除对象")public String deleteUser(@PathVariable Long id) {users.remove(id);return "success";}
}

之后再通过:http://localhost:8080/swagger-ui.html 访问,点击相关信息,可以看到具体的参数和相关属性。
还可以相关提示进行测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在上图请求的页面中,我们看到user的Value是个输入框,是的,Swagger除了查看接口功能外,还提供了调试测试功能,我们可以点击上图中右侧的Model Schema(黄色区域:它指明了User的数据结构),此时Value中就有了user对象的模板,我们只需要稍适修改,点击下方“Try it out!”按钮,即可完成了一次请求调用!

此时,你也可以通过几个GET请求来验证之前的POST请求是否正确。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

laravel框架介绍(二) 打开站点:autoload.php报错

Laravel&#xff1a;require..../vendor/autoload.php错误的解决办法 打开站点&#xff1a;http://laraveltest.com:8188/set_api-master/public/ set_api-master\public\index.php文件内容为&#xff1a; 解决办法&#xff1a; 1. cd 到该引用的根目录&#xff0c;删除 compo…

TLSF内存管理算法原理详解

TLSF算法原理概述 TLSF算法的核心优势在于其通过位运算执行内存块匹配算法&#xff0c;并兼顾了内存管理的额外内存消耗&#xff0c;无论是从内存池申请内存块还是释放内存块回内存池其操作都是O(1)。TLSF组织了一张一二级索引表映射其所有管理内存块的闲忙状态&#xff0c;并通…

git简介和指令

git是一个开源的的分布式版本控制系统&#xff0c;用于高效的管理各种大小项目和文件 用途&#xff1a;防止代码丢失&#xff0c;做备份 项目的版本管理和控制&#xff0c;可以通过设置节点进行跳转 建立各自的开发环境分支&#xff0c;互不影响&#xff0c;方便合并 在多终端开…

【学习笔记】记录一个win 11 操作文件卡顿,Windows 资源管理器CPU占用飙升问题

【学习笔记】记录一个win 11 操作文件卡顿&#xff0c;Windows 资源管理器CPU占用飙升问题 前段时间忽然发现电脑操作文件都会特别的卡&#xff0c;例如复制粘贴文件&#xff0c;写入文件等操作&#xff0c;卡的怀疑人生&#xff0c;原本以为是电脑太久没重启&#xff0c;重启…

Maven系列第8篇:大型Maven项目,快速按需任意构建

本篇涉及到的内容属于神技能&#xff0c;多数使用maven的人都经常想要的一种功能&#xff0c;但是大多数人都不知道如何使用&#xff0c;废话不多说&#xff0c;上干货。 需求背景 我们需要做一个电商项目&#xff0c;一般都会做成微服务的形式&#xff0c;按业务进行划分&am…

折纸问题

折纸的次数 —— 从上到下的折痕 本质上是中序遍历的问题&#xff0c;因为每一次在已有的折痕后折的时候&#xff0c;当前折痕上的折痕一定为凹&#xff0c;当前折痕下的折痕一定为凸 。实际模拟了一个不存在的二叉树结构的中序遍历。 注&#xff1a;折纸折几次整颗二叉树就有…

树形数据增删改查

功能描述&#xff1a; 默认展示所有项目点击项目展示当前项目下的所有区域点击区域展示当前区域下的所有工位以上以树形图格式展示项目&#xff0c;区域&#xff0c;和工位都可进行增加 修改 和删除&#xff0c;每个图标hover时显示对应提示信息项目&#xff0c;区域&#xff…

Git(二)版本控制、发展历史、初始化配置、别名

目录 一、版本控制1.1 为什么要使用版本控制&#xff1f;1.2 集中化的版本控制系统1.3 分布式的版本控制系统1.3 两种版本控制系统对比集中式&#xff08;svn&#xff09;分布式&#xff08;git&#xff09; 二、发展历史三、初始化配置3.1 配置文件3.2 配置内容 四、别名 官网…

Mac 超好用的工具推荐

Arc Arc 是 2022 年 4 月发布的浏览器产品&#xff0c;在介绍 Arc 浏览器之前&#xff0c;让我们来看下以 Chrome、FireFox、Edge、Safari 为代表的的传统浏览器&#xff1a; 难怪《浏览器是怎么工作的》作者 Paul Irish 曾说&#xff0c;尽管 W3C 并未规范浏览器界面&#xf…

欧拉图相关的生成与计数问题探究

最近学了一波国家集训队2018论文的最后一个专题。顺便带上了一些我的注解。 先放一波这个论文 1.基本概念 欧拉图问题是图论中的一类特殊的问题。在本文的介绍过程中&#xff0c;我们将会使用一些图 论术语。为了使本文叙述准确&#xff0c;本节将给出一些术语的定义。 定义…

每日一练 | 华为认证真题练习Day122

1、路由器所有的接口属于同一个广播域。 A. 对 B. 错 2、下列配置默认路由的命令中&#xff0c;正确的是&#xff08;&#xff09;。 A. [Huawei]ip route-static 0.0.0.0 0.0.0.0 192.168.1.1 B. [Huawei-Serial0]ip route-static 0.0.0.0 0.0.0.0 0.0.0.0 C. [Huawei]ip…

浅谈余压监控系统电气设计

安科瑞 华楠 摘 要&#xff1a;结合实际的工程设计案例&#xff0c;分析余压监控系统的设计&#xff0c;包括余压探测器、余压控制器、余压监控主机的控制原理等。防止人员在实际的火灾疏散过程中会出现楼梯间和前室之间、前室和室内走道之间防火门两侧压差过大&#xff0c;而…

HackTheBox - Starting Point -- Tier 0 ---Fawn

文章目录 一 题目二 实验过程 一 题目 Tags FTP、Network、Protocols、Reconnaissance、Anonymous/Guest Access译文&#xff1a;文件传输协议、网络、协议、侦察、匿名/访客访问Connect To attack the target machine, you must be on the same network.Connect to the Sta…

数字驱动,营销赋能丨工商职院电子商务专业学生,前往餐饮美食电商新业态基地试岗交流

纸上得来终觉浅&#xff0c;绝知此事要躬行。为了让学生更好的了解自己与所应聘岗位的匹配度&#xff0c;同时也希望在实际业务场景中&#xff0c;发掘自身优势&#xff0c;10月23日&#xff0c;四川产教融创园信息技术有限公司组织四川工商职业技术学院的电子商务专业学生一行…

《红蓝攻防对抗实战》三.内网探测协议出网之HTTP/HTTPS协议探测出网

目录 一. 在 Windows 操作系统中探测 HTTP/HTTPS 出网 1. Bitsadmin 命令 2.Certuil 命令 2.Linux系统探测HTTP/HTTPS出网 1.Curl命令 2.Wget命令 对目标服务器探测 HTTP/HTTPS 是否出网时&#xff0c;要根据目标系统类型执行命令&#xff0c;不同类型的操作系统使用的探…

【30】c++设计模式——>状态模式

状态模式概述 状态模式是一种行为型设计模式&#xff0c;它可以让一个对象在其内部状态发生变化时更改其行为。通过将每个状态封装成一个独立的类&#xff0c;我们可以使状态之间互相独立&#xff0c;并且使得状态的切换变得更加灵活、可扩展。&#xff08;多个状态之间可以相…

uni-app 小宠物 - 会说话的小鸟

在 template 中 <view class"container"><view class"external-shape"><view class"face-box"><view class"eye-box eye-left"><view class"eyeball-box eyeball-left"><span class"…

适合在虚拟化环境中部署 Kubernetes 的三个场景

在《虚拟化 vs. 裸金属&#xff1a;K8s 部署环境架构与特性对比》文章中&#xff0c;我们从架构和特性的角度&#xff0c;对比了在虚拟化和裸金属环境部署 Kubernetes 的优劣势&#xff0c;并在文末列举了两者更适合的应用场景。本文&#xff0c;我们将聚焦以虚拟化环境支持 K8…

ubuntu20.04下安装nc

前言 nc在网络渗透测试中非常好用&#xff0c;这里的主要记一下Ubuntu20.04中nc的安装 编译安装 第一种方式是自己编译安装&#xff0c;先下载安装包 nc.zip wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.…