Spring Boot集成Swagger接口分类与各元素排序问题

在上一篇中我们完成使用JSR-303校验,以及利用Swagger2得到相关接口文档,这节,我们在原先的基础之上,完成Swagger中关于对各个元素之间控制前后顺序的具体配置方法。

Swagger的接口的分组

首先我们需要对Swagger中的接口也就是以Controller 层作为第一级梯度进行组织的,Controller在我们实际开发中,与其他具体接口之间是存在一对多的关系,我们可以将同属一个模块的接口定义在一个Controller 中,默认情况之下,我们的Swagger 是以Controller为单位,对接口进行分组管理,在Swagger 中,这个分组的元素被称为Tag,但是这里的Tag与接口的关系并不是一对多关系,它支持更加丰富的多对多的关系,

默认的分组

首先通过创建一个简单的例子进,来看一下,我们是如何处理Swagger是如如何根据Controller来组织Tag与接口关系的,定义两个Controller,分别负责教师管理与学生管理接口,为了重复利用代码,我们就在上一篇的基础之上进行代码添加了:
为了简单明了,我均将下列代码放在Application类里边

@RestController
@RequestMapping(value = "/teacher")
static class TeacherController {@GetMapping("/miaow")public String miaow() {return "miaow";}
}@RestController
@RequestMapping(value = "/student")
static class StudentController {@ApiOperation("获取学生清单")@GetMapping("/list")public String bbb() {return "bbb";}@ApiOperation("获取教某个学生的老师清单")@GetMapping("/his-teachers")public String ccc() {return "ccc";}@ApiOperation("创建一个学生")@PostMapping("/aaa")public String aaa() {return "aaa";}
}

此时通过:localhost:8080/swagger-ui.html 访问得到我们Swagger的组织结构是

在这里插入图片描述
在上图中我们了解到我们定义的控制层,得到的swagger生成的默认结构展示出来了。

application.properties文件

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.didispace
swagger.base-path=/**swagger.ui-config.tags-sorter=alpha
swagger.ui-config.operations-sorter=alpha

在启动类添加相关控制层接口:

@EnableSwagger2Doc
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}@Api(tags = {"1-教师管理","3-教学管理"})@RestController@RequestMapping(value = "/teacher")static class TeacherController {@ApiOperation(value = "miaow")@GetMapping("/miaow")public String miaow() {return "miaow";}}@Api(tags = {"2-学生管理"})@RestController@RequestMapping(value = "/student")static class StudentController {@ApiOperation(value = "获取学生清单", tags = "3-教学管理")@GetMapping("/list")public String bbb() {return "bbb";}@ApiOperation("获取教某个学生的老师清单")@GetMapping("/his-teachers")public String ccc() {return "ccc";}@ApiOperation("创建一个学生")@PostMapping("/aaa")public String aaa() {return "aaa";}}
}

得到结果集
在这里插入图片描述

自定义默认分组的名称

@Api(tags = "教师管理")
@RestController
@RequestMapping(value = "/teacher")
static class TeacherController {// ...
}@Api(tags = "学生管理")
@RestController
@RequestMapping(value = "/student")
static class StudentController {// ...
}

我们在Api的tags修改成为我们想要的表达文字:
在这里插入图片描述

合并Controller分组

在此,我们使用了Tag和Controller 一一对应的情况,Swagger中还支持更加灵活的分组!从@Api注解中,我们如果有去看详细代码的时候,发现tags属性其实是一个数组类型。

在这里插入图片描述
因而,我们可以通过地定义同名的Tag来汇总Controller中的相关接口,比如我们可以定义一个Tag为“教学管理“,让这个分组同时包含教师管理和学生管理的所有接口,案例如下:

@Api(tags = {"教师管理", "教学管理"})
@RestController
@RequestMapping(value = "/teacher")
static class TeacherController {// ...
}@Api(tags = {"学生管理", "教学管理"})
@RestController
@RequestMapping(value = "/student")
static class StudentController {// ...
}

更新细粒度的接口分组

通过@Api可以实现将Controller中的接口合并到一个Tag中,但是如果我们希望精确到某个接口的合并,我们应该如何做?

@Api(tags = {"教师管理","教学管理"})
@RestController
@RequestMapping(value = "/teacher")
static class TeacherController {@ApiOperation(value = "maiow")@GetMapping("/miaow")public String miaow() {return "miaow";}}@Api(tags = {"学生管理"})
@RestController
@RequestMapping(value = "/student")
static class StudentController {@ApiOperation(value = "获取学生清单", tags = "教学管理")@GetMapping("/list")public String bbb() {return "bbb";}@ApiOperation("获取教某个学生的老师清单")@GetMapping("/his-teachers")public String ccc() {return "ccc";}@ApiOperation("创建一个学生")@PostMapping("/aaa")public String aaa() {return "aaa";}}

得到效果图:
在这里插入图片描述

内容的顺序

在完成了接口的分组后,我们可以进行对接口内容的展示顺序进行调整,其中,我们主要涉及三个方面:分组的排序、接口的排序、以及参数的排序。

分组排序

关于分组排序,也就是Tag的排序。目前版本的Swagger支持并不太好,通过文档我们可以找到关于Tag排序的配置方法。

第一种,适合原生的Swagger用户,修改:
在这里插入图片描述
第二种方式:Swagger Starter用户,可以通过修改配置的方式:

swagger.ui-config.tags-sorter=alpha

修改上述的配置的源码:

public enum TagsSorter {ALPHA("alpha");private final String value;TagsSorter(String value) {this.value = value;}@JsonValuepublic String getValue() {return value;}public static TagsSorter of(String name) {for (TagsSorter tagsSorter : TagsSorter.values()) {if (tagsSorter.value.equals(name)) {return tagsSorter;}}return null;}
}

我们可以发现Swagger 提供考虑一个选项,就是按照字字母顺序进行排序。

@Api(tags = {"1-教师管理","3-教学管理"})
@RestController
@RequestMapping(value = "/teacher")
static class TeacherController {// ...}@Api(tags = {"2-学生管理"})
@RestController
@RequestMapping(value = "/student")
static class StudentController {@ApiOperation(value = "获取学生清单", tags = "3-教学管理")@GetMapping("/list")public String bbb() {return "bbb";}// ...
}

在这里插入图片描述

接口的排序

在完成了分组排序问题(虽然不太优雅…)之后,在来看看同一分组内各个接口该如何实现排序。同样的,凡事先查文档,可以看到Swagger也提供了相应的配置,下面也分两种配置方式介绍:
第一种还是适合原生Swagger用户的,可以修改:
在这里插入图片描述
第二种:Swagger Starter用户,可以通过修改配置方式:

swagger.ui-config.operations-sorter=alpha

这个配置不像Tag的排序配置没有可选项。它提供了两个配置项:alpha和method,分别代表了按字母表排序以及按方法定义顺序排序。当我们不配置的时候,改配置默认为alpha。

在这里插入图片描述

参数的排序

完成了接口的排序后,更加细粒度的就是请求参数的排序了,在默认的情况下,我们的Swagger会对Model的参数内容展示进行按照字母排序,我们的展示的User在Swagger之前是这样的:

现在,我们希望可以按照Model中定义的成员变量顺序来展示,那么需要我们通过@ApiModelProperty 注解的position参数来实现位置的设置。

对应的User对象如下:
在这里插入图片描述
w未加

@ApiModel(description = "用户实体")
public class User {@ApiModelProperty(value = "用户编号", position = 1)private Long id;@NotNull@Size(min = 2, max = 5)@ApiModelProperty(value = "用户姓名", position = 2)private String name;@NotNull@Max(100)@Min(10)@ApiModelProperty(value = "用户年龄", position = 3)private Integer age;@NotNull@Email@ApiModelProperty(value = "用户邮箱", position = 4)private String email;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;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public User(Long id, String name, Integer age, String email) {this.id = id;this.name = name;this.age = age;this.email = email;}public User() {}
}

加了Position之后的swagger展示:
在这里插入图片描述

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

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

相关文章

ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑

ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑 1.Elasticsearch 产生背景 大规模数据如何检索 如:当系统数据量上了 10 亿、100 亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题&a…

52张扑克牌(Python字符串替换)

输入a~d的字母对应扑克牌黑、红、梅、方花色 1~13数字对应扑克牌点数;输出“字母数字”字符串对应的扑克牌花色和点数。 (本笔记适合熟悉Python循环和str字符串处理的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free…

智慧矿山系统中的猴车安全监测与识别

智慧矿山是近年来兴起的一种采用人工智能(AI)技术的矿山管理方式,它通过利用智能传感设备和先进算法来实现对矿山环境和设备进行监测和管理,从而提高矿山的安全性和效率。在智慧矿山的AI算法系列中,猴车不安全行为识别…

【信创】银河麒麟V10 本地部署yum数据源

1. 下载银河麒麟系统ISO镜像文件。 https://fdoc.epoint.com.cn:3366/ISO/麒麟V10/ wget https://fdoc.epoint.com.cn:3366/ISO/麒麟V10/Kylin-Server-10-SP1-Release-Build19-20210319-x86.iso 一般这个镜像文件会默认放置在/home目录下,如图: 挂载到…

宇信科技:强势行业加速融入AIGC,同时做深做细

【科技明说 | 重磅专题】 大家可能没有想到,一向对外低调行事的宇信科技,在AIGC方面2023年就已经训练出了适配金融场景的垂直模型,并应用到了各产品线上,同时结合通用大模型预研了宇信金融系统编程大模型。宇信金融系…

我用好说 AI 做二次元人设

你有没有想过自己做一部原创作品? 就像开发《星露谷物语》那样,自己把控作品的 角色、故事、载体、宣传 等方方面面,让 idea 不再只是灵光一闪。 以前是 “万事开头难”,可能第一步都举步维艰。但现在有了 AI 就不同了&#xff…

电脑频繁出现程序无响应怎么办?

在Windows系统中每个运行的应用程序都会有一个进程,而每个进程会有多个线程,就如你打开微信同时与多个人聊天,而每个线程只能同时处理一个线程。若Windows向程序传递消息时,而程序在处理其他工作未作出反应,Windows就会…

吐血整理,Jmeter接口测试-项目案例场景,直接上高速...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 场景一&#xff1…

Matlab2022b图文安装保姆级教程

注意:完成安装步骤1和步骤2之后,再去使用Matlab2022b 本次安装后的版本信息如下,64位软件,windows系统 Matlab2022a与2022b的比较 MATLAB主要用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险…

中国各城市土地利用类型(城市功能)矢量数据集(shp)

中国各城市土地利用类型(城市功能)数据集 时间:2018年 全国范围的城市用地类型数据(居住/商业/交通用地等共计11类) 分类:居住用地、商业用地、工业用地、医疗设施用地、体育文化设施用地、交通场站用地、绿地等用地类型 含城市编码、一级分类5个、二级分类11个 数据按…

省市区三级联动查询redis(通过python脚本导入数据)

最近工作有一个工作需求是实现省市区联动,点击省下拉框,选中一个省,然后再选市,最后选区,当然最重要的首先自然是数据了,没数据怎么测试接口,我数据是在 https://hxkj.vip/demo/echartsMap/ 这里…

Notepad++安装插件和配置快捷键

Notepad是一款轻量级、开源的文件编辑工具,可以编辑、浏览文本文件、二进制文件、.cpp、.java、*.cs等文件。Notepad每隔1个月,就有一个新版本,其官网是: https://github.com/notepad-plus-plus/notepad-plus-plus。这里介绍其插件…

企业内部外网向内网传输文件如何实现高效安全?

随着信息技术的发展,企业内部外网隔离已成为一种常见的网络安全措施,旨在防止外部攻击者入侵内部网络,保护企业的核心数据和业务系统。然而,企业内外网隔离也带来了一些问题,其中之一就是如何实现内外网之间的文件传输…

Mac 配置环境变量

Mac 配置环境变量 修改配置文件 vim ~/.bash_profile i进入编辑模式. Esc:wq 保存文件 esc:q 退出 如:jdk环境变量配置 JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_361.jdk/Contents/Home CLASSPATH J A V A H O M E / l i b / t o o l…

【Acwing170】加成序列(dfs+迭代加深+剪枝)题解和一点感想

本思路来自acwing算法提高课 题目描述 看本文需要准备的知识 1.dfs算法基本思想 2.对剪枝这个词有个简单的认识 迭代加深思想和此题分析 首先,什么是迭代加深呢?当一个问题的解有很大概率出现在递归树很浅的层,但是这个问题的解本身存在…

【Proteus仿真】【Arduino单片机】SG90舵机控制

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用SG90舵机等。 主要功能: 系统运行后,舵机开始运行。 二、软件设计 /* 作者:嗨小易(QQ&#x…

【RTOS学习】CubeMX对FreeRTOS的适配

🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 经过前面的学习,现在我已经对FreeRTOS有了一个初步的认识,而且也可以使用F…

TiDB 企业版全新升级,平凯数据库核心特性全解读

作为 TiDB 企业版的全新升级,平凯数据库一经推出便广受媒体及用户关注。 近日,平凯星辰首席科学家丁岩在“平凯数据库全解读”活动中,首次详细介绍了平凯数据库的核心能力。 本文为丁岩演讲实录全文,为方便阅读,已做部…

Nginx 实战指南:暴露出请求的真实 IP

🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏&…

优思学院|制作SPC控制图一定要用Minitab吗?

如果是使用SPC控制图作为一种控制过程变异的工具,无需使用Minitab,用Excel已经相当足够。但无论你使用哪种工具,你都应该要先明白SPC或者控制图工具的目的是什么,以及如何选择合适的控制图,以及如何去解读它等等。 要…