SpringBoot 集成 Swagger2
Swagger
- 号称世界上最流行的Api框架
- RestFul Api 文档在线自动生成工具 => Api 文档与Api定义同步更新
- 直接运行,可以在线测试API接口
- 支持多种语言(java、php、…)
Swagger 官网
在项目中使用Swagger需要 springfox
- swagger2
- ui
SpringBoot 集成Swagger
新建一个SpringBoot Web项目
导入相关依赖
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> </dependency>
编写controller
配置swagger ==> Config
@Configuration //开启Swagger2 @EnableSwagger2 public class SwaggerConfig {}
运行项目,访问Swagger-ui页面 [http://localhost:8088/swagger-ui.html]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VrCetpiT-1587184802807)(C:\Users\jiongming.liao\AppData\Roaming\Typora\typora-user-images\image-20200414115411769.png)]
配置 Swagger的基本信息
/*** 配置Swagger的Docket的bean*/@Beanpublic Docket docket(){return new Docket(DocumentationType.SWAGGER_2).apiInfo(getApiInfo());}private ApiInfo getApiInfo(){Contact contact = new Contact("jiongming.liao","https://yitu-inc.com","jiongming.liao@yitu-inc.com");return new ApiInfo("我的SwaggerAPI文档","Swagger Demo","v1.0","urn:tos",contact,"Apache 2.0","http://www.apache.org/licenses/LICENSE-2.0",new ArrayList());}
Swagger配置扫描接口
/*** 配置Swagger的Docket的bean* enable: 是否开启Swagger*/@Beanpublic Docket docket(){return new Docket(DocumentationType.SWAGGER_2).apiInfo(getApiInfo()).enable(true).select()//RequestHandlerSelectors 配置要扫描接口的方式//basePackage 配置要扫描的包//.apis(RequestHandlerSelectors.basePackage("com.example.swaggerdemo.controller"))//any(): 扫描全部//none(): 不扫描//withMethodAnnotation: 扫描方法上的注解 // .apis(RequestHandlerSelectors.withMethodAnnotation(GetMapping.class))//withClassAnnotation: 扫描类上的注解.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))//paths: 过滤路径.paths(paths()).paths(PathSelectors.ant("/VIID/**")).build();}private Predicate<String> paths() {return or(regex("/business.*"),regex("/some.*"),regex("/contacts.*"),regex("/pet.*"),regex("/springsRestController.*"),regex("/test.*"));}
配置API文档分组
.groupName("A")
配置多个API文档分组
@Beanpublic Docket docketA(){return new Docket(DocumentationType.SWAGGER_2).groupName("A");}@Beanpublic Docket docketB(){return new Docket(DocumentationType.SWAGGER_2).groupName("B");}@Beanpublic Docket docketC(){return new Docket(DocumentationType.SWAGGER_2).groupName("C");}@Beanpublic Docket docketC(){return new Docket(DocumentationType.SWAGGER_2).groupName("D");}
Swagger注释API
API 作用范围 使用位置 @ApiModel 描述返回对象的意义 用在返回对象类上 @ApiModelProperty 对象属性 用在出入参数对象的字段上 @Api 协议集描述 用于controller类上 @ApiOperation 协议描述 用在controller的方法上 @ApiResponses Response集 用在controller的方法上 @ApiResponse Response 用在 @ApiResponses里边 @ApiImplicitParams 非对象参数集 用在controller的方法上 @ApiImplicitParam 非对象参数描述 用在@ApiImplicitParams的方法里边
@ApiModel
使用场景
在实体类上边使用,标记类时swagger的解析类
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
value | String | 类名 | 为模型提供备用名称 |
description | String | “” | 提供详细的类描述 |
parent | Class<?> parent | Void.class | 为模型提供父类以允许描述继承关系 |
discriminatory | String | “” | 支持模型继承和多态,使用鉴别器的字段的名称,可以断言需要使用哪个子类型 |
subTypes | Class<?>[] | {} | 从此模型继承的子类型数组 |
reference | String | “” | 指定对应类型定义的引用,覆盖指定的任何其他元数据 |
代码示例
@ApiModel(value = "响应结果集对象",description = "用于批量接口处理结果返回")
UI效果展示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zge2J7tw-1587184802811)(C:\Users\jiongming.liao\AppData\Roaming\Typora\typora-user-images\image-20200414193022211.png)]
@ApiModelProperty 对象属性
使用场景
使用在被 @ApiModel 注解的模型类的属性上
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
value | String | “” | 属性简要说明 |
name | String | “” | 运行覆盖属性的名称。重写属性名称 |
allowableValues | String | “” | 限制参数可接收的值,三种方法,固定取值,固定范围 |
access | String | “” | 过滤属性,参阅:io.swagger.core.filter.SwaggerSpecFilter |
notes | String | “” | 目前尚未使用 |
dataType | String | “” | 参数的数据类型,可以是类名或原始数据类型,此值将覆盖从类属性读取的数据类型 |
required | boolean | false | 是否为必传参数,false:非必传参数; true:必传参数 |
position | int | 0 | 允许在模型中显示排序属性 |
hidden | boolean | false | 隐藏模型属性,false:不隐藏; true:隐藏 |
example | String | “” | 属性的示例值 |
readOnly | boolean | false | 指定模型属性为只读,false:非只读; true:只读 |
reference | String | “” | 指定对应类型定义的引用,覆盖指定的任何其他元数据 |
allowEmptyValue | boolean | false | 允许传空值,false:不允许传空值; true:允许传空值 |
代码示例
@ApiModelProperty(name = "requestURL", value = "请求URL",notes = "请求URL", required = true)private String requestURL;@ApiModelProperty(value = "状态码",notes = "处理结果状态码", required = true)private String statusCode;@ApiModelProperty(value = "状态描述",notes = "处理结果描述", required = true)private String statusString;@ApiModelProperty(value = "跟踪ID", notes = "跟踪ID", required = true)private String id;@ApiModelProperty(value = "本地时间", notes = "本地时间", required = true)private String localTime;
UI效果展示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VXZuPGkg-1587184802814)(C:\Users\jiongming.liao\AppData\Roaming\Typora\typora-user-images\image-20200414193333600.png)]
@Api 协议集描述
使用场景
在controller类上使用
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
tags | String[] | {""} | 表示说明 |
value | String | “” | 也表示说明,与tags同时存在时取tags的值 |
description | String | “” | 注释说明这个类(过时) |
basePath | String | “” | |
position | String | “” | |
produces | String | “” | 采用逗号分隔的 content types 类型的返回数据,例如:application/json,application/xml |
consumes | String | “” | 采用逗号分隔的 content types 类型的入参数据类型,例如:application/json,application/xml |
protocols | String | “” | 指定协议类型:http,https,ws,wss,多个协议使用逗号进行分隔 |
Authorization | Authorization[] | @Authorization("") | 获取此操作的授权列表 |
代码示例
@Api(tags = {"设备管理接口"})
@RestController
@RequestMapping(value = "/VIID/APEs")
public class ApeController {}
UI效果展示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h894JxMV-1587184802818)(C:\Users\jiongming.liao\AppData\Roaming\Typora\typora-user-images\image-20200417143022592.png)]
@ApiOperation协议描述
使用场景
用在controller的方法上
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
value | String | 接口简要说明,120字符或更少 | |
notes | String | “” | 接口详细描述 |
tags | String[] | “” | tag 列表,可用于按自愿或任何其它限定符对操作进行逻辑分组 |
response | Class<?> | Void.class | 接口返回类型 |
responseContainer | String | “” | 声明包装响应的容器。有效值为 List,Set,Map,任何其它值都将被忽略 |
responseReference | String | “” | 指定对响应类型的引用,本地/远程引用,并将覆盖任何其它指定的response()类 |
httpMethod | String | “” | 请求方式:“GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH”,如果未指定则使用除"PATH"之外的其它所有 |
nickname | String | “” | 第三方工具使用operationId来唯一表示此操作 |
produces | String | “” | 采用逗号分隔的 content types 类型的返回数据,例如:application/json,application/xml |
consumes | String | “” | 采用逗号分隔的 content types 类型的入参数据类型,例如:application/json,application/xml |
protocols | String | “” | 指定协议类型:http,https,ws,wss,多个协议使用逗号进行分隔 |
authorizations | Authorization[] | @Authorization(value = “”) | 获取此操作的授权列表 |
hidden | boolean | false | 是否隐藏操作列表中的操作 |
responseHeaders | ResponseHeader[] | @ResponseHeader(name = “”, response = Void.class) | 指定 response header 信息列表 |
code | int | 200 | HTTP返回状态码 |
extensions | Extension[] | @Extension(properties = @ExtensionProperty(name = “”, value = “”)) | 可选的扩展数组 |
代码示例
@ApiOperation(value = "批量创建采集设备", notes = "根据上传的信息创建采集设备")public ResponseStatusList createApes(HttpServletRequest request,@RequestBody @ApiParam(value = "采集设备创建对象列表", required = true) APEList apeList) {String url = request.getRequestURL().toString();ResponseStatusList responseStatusList = new ResponseStatusList();responseStatusList.setResponseStatusObject(new ArrayList<>());apeList.getAPEObject().forEach(ape -> {responseStatusList.getResponseStatusObject().add(ResponseStatusFactory.getResponseStatus(url, ape.getApeID()));});return responseStatusList;}
UI效果展示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAQdDdAp-1587184802820)(C:\Users\jiongming.liao\AppData\Roaming\Typora\typora-user-images\image-20200417144131274.png)]
@ApiResponses
使用场景
在 Rest 接口上使用,用作返回值的描述
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
value | ApiResponse[] | ApiResponse 列表 |
@ApiResponse
使用场景
在 Rest 接口或类上和 @ApiResponses 组合使用,组装返回参数说明
概述
描述操作的可能响应,这可用于描述 Rest API 调用中可能的成功和错误 code 码。此注解可以在方法或类级别应用;仅当在方法级别或抛出时未定义相同代码的@ApiResponse注解时才会解析类级别注解异常,如果响应中使用了不同的响应类,则可以通过将响应类于响应码组合使用。注意swagger不允许单个响应代码的多个响应类型。此注解不直接使用,单独使用时swagger不会解析,应该和ApiResponses组合使用。
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
code | int | 响应的HTTP状态码 | |
message | String | 伴随响应的人类可读的消息 | |
response | Class<?> | Void.class | 用于描述消息有效负载的可选响应类,对应于响应消息对象的 schema 字段 |
reference | String | “” | 指定对响应类型的引用,指定的应用可以使本地引用,也可以是远程引用,将按原样使用,并将覆盖任何指定的response()类 |
responseHeaders | ResponseHeader[] | @ResponseHeader(name = “”, response = Void.class) | 可能响应的 header 列表 |
responseContainer | String | “” | 声明响应的容器,有效值为List,Set,Map,任何其他值都将被忽略 |
代码示例
@ApiOperation(value = "批量创建采集设备", notes = "根据上传的信息创建采集设备")@ApiResponses({@ApiResponse(code = 200, message = "成功"),@ApiResponse(code = 400, message = "错误的请求")})@RequestMapping(value = "", method = RequestMethod.POST)public ResponseStatusList createApes(HttpServletRequest request,@RequestBody @ApiParam(value = "采集设备创建对象列表", required = true) APEList apeList) {String url = request.getRequestURL().toString();ResponseStatusList responseStatusList = new ResponseStatusList();responseStatusList.setResponseStatusObject(new ArrayList<>());apeList.getAPEObject().forEach(ape -> {responseStatusList.getResponseStatusObject().add(ResponseStatusFactory.getResponseStatus(url, ape.getApeID()));});return responseStatusList;}
UI效果展示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KCbsKBQA-1587184802821)(C:\Users\jiongming.liao\AppData\Roaming\Typora\typora-user-images\image-20200417151003007.png)]
@ApiImplicitParams
使用场景
用在请求的方法上,包含一组参数说明
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
@ApiImplicitParam | ApiImplicitParam[] | 用在 @ApiImplicitParams 注解中,指定一个请求参数的配置信息 | |
@ApiImplicitParam
使用场景
用在请求的方法上,包含一组参数说明
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
name | String | “” | 参数名 |
value | String | “” | 参数的汉字说明、解释 |
required | 参数是否必须传 | ||
paramType |
参数放在哪个地方· header --> 请求参数的获取:@RequestHeader · query --> 请求参数的获取:@RequestParam · path(用于restful接口)–> 请求参数的获取:@PathVariable · body(不常用) · form(不常用) |
||
dataType | 参数类型 | ||
defaultValue | 参数的默认值 |
代码示例
@ApiOperation(value = "批量获取采集设备", notes = "根据上传的信息获取采集设备")@ApiImplicitParams({@ApiImplicitParam(name="name",value="设备名称"),@ApiImplicitParam(name="deviceId",value="设备国标ID",required=true)})@ApiResponses(@ApiResponse(code = 200, message = "获取到的采集设备信息的列表"))@RequestMapping(value = "", method = RequestMethod.GET)public APEList getQueryApes(HttpServletRequest request,@RequestParam String name,@RequestParam String deviceId){return new APEList();}
@ApiParam
使用场景
用在请求的方法参数上
属性
属性名称 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
name | String | “” | 参数名 |
value | String | “” | 参数的汉字说明、解释 |
required | 参数是否必须传 | ||
代码示例
@ApiOperation(value = "批量获取采集设备", notes = "根据上传的信息获取采集设备")@ApiResponses(@ApiResponse(code = 200, message = "获取到的采集设备信息的列表"))@RequestMapping(value = "", method = RequestMethod.GET)public APEList getQueryApes(HttpServletRequest request,@RequestParam @ApiParam(value = "设备名称", required = true)String name,@RequestParam @ApiParam(value = "设备国标ID", required = true)String deviceId) throws Exception {return new APEList();}
UI效果展示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zmTZmKN2-1587184802823)(C:\Users\jiongming.liao\AppData\Roaming\Typora\typora-user-images\image-20200417204624911.png)]
SpringBoot 集成 Swagger2相关推荐
- springboot集成swagger2测试接口
springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...
- springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题
springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis-plus无法正常使用问题 参考文章: (1)springboot集成swagger2多模块中文配 ...
- 13.9 SpringBoot集成Swagger2中遇到的问题
13.9 SpringBoot集成Swagger2中遇到的问题 我们在使用SpringBoot集成Swagger2中,访问:http://127.0.0.1:8188/swagger-ui.html ...
- springboot集成swagger2构建RESTful API文档
在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...
- springboot集成swagger2,构建优雅的Restful API
springboot集成swagger2,构建优雅的Restful API 转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/ ...
- SpringBoot集成Swagger2自动生成友好的RestApi测试页面及文档
springBoot集成swagger2 水煮鱼又失败了 https://www.jianshu.com/p/002ce2f26103 1 背景 springBoot作为微服务首选框架,为其他服务提供 ...
- 【快速上手系列】使用Springboot集成Swagger2的简单使用测试
[快速上手系列]使用Springboot集成Swagger2的简单使用测试 简介 Swagger2是为了解决企业中接口(api)中定义统一标准规范的文档生成工具. 尤其是前后端分离时对一些业务接口也不 ...
- SpringBoot集成Swagger2
SpringBoot集成Swagger2 刚开始用2.0.2.RELEASE版本的SpringBoot去继承2.7.0版本的springfox-swagger2一直出现请求下面这种情况,就是在启动Sp ...
- SpringBoot集成Swagger2与Swagger3的区别
SpringBoot集成Swagger2与Swagger3的区别 前言 一.pom文件中引入Swagger依赖 Swagger2 Swagger3 二.Swagger配置 Swagger2 Swagg ...
- springboot集成swagger2页面出现swagger-resources404
springboot集成swagger2页面出现swagger-resources404 问题描述 访问/doc.html出现页面,但是没有接口文档,查看页面元素发现问题: /swagger-reso ...
最新文章
- 并发编程之多进程篇之四
- Java实践(四)——数组
- Java多线程-线程通信
- 舞台现场直播技术实践
- mvc:default-servlet-handler/作用
- 人的幸福感取决于什么
- python print(f)执行将报错_Linux中为什么执行自己的程序要在前面加./
- msf监听php反弹shell,使用msf进行反弹shell+内网渗透
- MyBatis动态插入的实现
- java压测请求线程数_jmeter压力测试 设置一秒发送一次请求,一秒两次请求
- JAVA生成企业组织机构代码、营业执照代码、税务登记号码、统一社会信用代码并校验
- 从autotool迁移到cmake
- 云呐|国有资产管理信息系统,资产管理信息系统功能描述
- 微信发送文件卡死或黑屏
- 看完微信公众号最新的广告分成方案,只想给32个赞
- 微信公众号教程(10)公众账号自定义回复功能
- WSL登录失败:未授权用户再次计算机上的请求登录类型
- android语音控制歌曲播放,发条 - 支持音乐聚合搜索,歌单导入,语音控制的 APP - Android 应用 - 【最美应用】...
- 学习笔记| AS入门(三) 布局篇
- C++版 PPyolo+部署记录
热门文章
- 插件9:去掉重音符号
- [Windows10]BitLocker解锁经验分享
- SpringBoot创建项目依赖爆红
- stm32使用红黑树
- Revit二次开发入门教程一(工具篇)
- Linux命令初步-羽飞作品
- k8s使用volume将ConfigMap作为文件或目录直接挂载_NET Core + Kubernetes:Volume
- springboot+websocket+sockjs进行消息推送【基于STOMP协议】
- 数据挖掘/机器学习/算法岗2017校招面试总结
- [转载]BBC镜头下的2012年世锦赛