springmvc+swagger构建Restful风格文档
本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档;上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage文档你还用swagger,这里主要目的是让接口文档统一,当操作多种开发语言做接口时,如果有统一风格的api文档是不是很不错;还有就springcloude而言,微服务如果有很多的话,使用swagger自动根据服务serverid来加载api文档是很方便的。swagger设置比较简单,为了今后查找资料和使用方便故此记录下
- 准备工作
- 快速构建api文档
- 常用的细节
- 过滤默认错误api
- 添加授权token列
- 添加上传文件列
准备工作
首选需要一个springmvc项目,这里我用的是springboot+maven来快速构建, 要使用swagger只需要在maven中添加依赖包就行:
1 <dependency> 2 <groupId>io.springfox</groupId> 3 <artifactId>springfox-swagger2</artifactId> 4 <version>2.6.1</version> 5 </dependency> 6 <dependency> 7 <groupId>io.springfox</groupId> 8 <artifactId>springfox-swagger-ui</artifactId> 9 <version>2.6.1</version> 10 </dependency>
然后创建一个UserController,然后再定义个Login的Action,定义请求和响应实体,由于api接口需要对请求和响应属性列做 文字描述,并且上面我们在项目中加了swagger包,因此以直接在实体和Action使用特性来增加具体文字描述:
1 @RestController 2 @Api(tags = "会员接口") 3 public class UserController { 4 5 @PostMapping("/login") 6 @ApiOperation(value = "登录") 7 public LoginRp login(@RequestBody LoginRq rq) { 8 LoginRp rp = new LoginRp(); 9 10 if (rq.getUserName().isEmpty() || rq.getUserPwd().isEmpty()) { 11 rp.setCode(EmApiCode.登录账号或密码不能为空.getVal()); 12 return rp; 13 } 14 15 if (rq.getUserName().equals("shenniu001") && rq.getUserPwd().equals("123")) { 16 rp.setCode(EmApiCode.成功.getVal()); 17 18 rp.setToken(UUID.randomUUID().toString()); 19 } else { 20 rp.setCode(EmApiCode.失败.getVal()); 21 } 22 return rp; 23 } 24 25 }
请求和响应实体类:
1 @ApiModel 2 public class LoginRq implements Serializable{ 3 4 private static final long serialVersionUID = -158328750073317876L; 5 6 @ApiModelProperty(value = "登录账号") 7 private String userName; 8 9 @ApiModelProperty(value = "登录密码") 10 private String userPwd; 11 12 } 13 14 @ApiModel 15 public class LoginRp extends BaseRp implements Serializable { 16 private static final long serialVersionUID = -1486838360296425228L; 17 18 @ApiModelProperty(value = "授权token") 19 private String token; 20 21 public String getToken() { 22 return token; 23 } 24 25 public void setToken(String token) { 26 this.token = token; 27 } 28 }
View Code
注解简单说明:
@Api:同一类接口的总描述,一般用于Controller标记
@ApiOperation(value = "登录"):在Action上标记,描述这个Action接口具体干什么
@ApiModel:请求响应实体类class上的标记
@ApiModelProperty(value = "登录账号"):请求响应属性上的标记,用来描述该属性具体说明
快速构建api文档
准备做完后要生成文档,还需要自定义两个封装类,如下Swagger2类:
1 @Configuration 2 @EnableSwagger2 3 public class Swagger2 { 4 5 @Bean 6 public Docket createRestApi() { 7 8 return new Docket(DocumentationType.SWAGGER_2) 9 .select() 10 //过滤默认错误api 11 .paths(Predicates.not(PathSelectors.regex("/error.*"))) 12 .build() 13 .apiInfo(apiInfo()); 14 } 15 16 //常用的细节 17 //过滤指定的action 18 //添加授权token列 19 //添加上传文件列 20 private ApiInfo apiInfo() { 21 return new ApiInfoBuilder() 22 .title("开车接口文档") 23 .description("该文档只允许我使用") 24 //版本 25 .version("0.0.0.1") 26 .contact("作者:841202396@qq.com") 27 .build(); 28 } 29 }
这个类主要初始化一些全局文档的说明和版本并且构架api文档;上面是生成文档,但是具体文档数据源用从swagger的SwaggerResourcesProvider中来,因此自定义的DocumentationConfig类实现SwaggerResourcesProvider接口,如下:
1 @Component 2 @Primary 3 public class DocumentationConfig implements SwaggerResourcesProvider { 4 @Override 5 public List<SwaggerResource> get() { 6 List resources = new ArrayList<>(); 7 resources.add(swaggerResource("开车接口api", "/v2/api-docs", "0.0.0.1")); 8 resources.add(swaggerResource("坐车接口api", "/v2/api-docs", "0.0.0.1")); 9 return resources; 10 } 11 12 private SwaggerResource swaggerResource(String name, String location, String version) { 13 SwaggerResource swaggerResource = new SwaggerResource(); 14 swaggerResource.setName(name); 15 swaggerResource.setLocation(location); 16 swaggerResource.setSwaggerVersion(version); 17 return swaggerResource; 18 } 19 }
主要加载文档的数据源,数据源主要通过 resources.add(swaggerResource("坐车接口api", "/v2/api-docs", "0.0.0.1")) 添加,倘若你想添加其他api接口源就可以在这里进行配置,直接把/v2/api-docs改成你的url就行,这个地方也是springcloud微服务api添加的入口;当编码完成后我们来看看效果:
能成功加载出我们的login接口,而且有一些说明性的文字;再来看看我们请求和响应的参数是否有说明:
请求和响应都有了相应的说明,是不是挺简单;
常用的细节
1.过滤默认错误api
由于springmvc封装有错误的controller,因此swagger也会把这个展示出来,因为是扫描的所有controller来展示swagger文档的,故此我们需要屏蔽这些对于对接方没用的接口;这里通过设置paths的不匹配就行了,以下代码:
1 //过滤默认错误api 2 paths(Predicates.not(PathSelectors.regex("/error.*")))
2.添加授权token列
对于接口验证来说通常需要个token并且放在header里面,这里我们直接在swagger上增加一个显示的token,只需要在build之前增加一个header参数:
1 @Bean 2 public Docket createRestApi() { 3 4 List<Parameter> pars = new ArrayList<>(); 5 //添加授权token 6 ParameterBuilder tokenPar = new ParameterBuilder(); 7 tokenPar.name("token").description("授权token 注:登录不需要填,只有post方式的接口必填"). 8 modelRef(new ModelRef("string")). 9 parameterType("header").required(false).build(); 10 pars.add(tokenPar.build()); 11 12 return new Docket(DocumentationType.SWAGGER_2) 13 .select() 14 .paths(Predicates.not(PathSelectors.regex("/error.*"))) 15 .build() 16 .globalOperationParameters(pars) 17 .apiInfo(apiInfo()); 18 }
这个时候每个action接口文档块中都会增加一个token列,type是header类型:
3.添加上传文件列
通常api接口都包含一个公共上传接口,为了让swagger文档更方便,我们需要让她支持下上传;首先这样定义一个上传接口:
1 @PostMapping(value = "/upload",headers = "content-type=multipart/form-data") 2 @ApiOperation(value = "上传") 3 public BaseRp upload(@ApiParam(value = "上传的文件",required = true) @RequestBody MultipartFile file) { 4 BaseRp rp = new BaseRp(); 5 6 rp.setMessage("上传文件名:"+file.getOriginalFilename()); 7 8 return rp; 9 }
其他就不用再设置了,仅仅如此运行后效果:
咋们点击“选择文件”测试下上传,点击try能够得到如下成功运行的效果图:
springmvc+swagger构建Restful风格文档相关推荐
- 使用Swashbuckle构建RESTful风格文档
本次和大家分享的是Swagger to WebApi的nuget包Swashbuckle:因为项目需要统一api文档的风格,并要支持多种开发语言(C#,java,python),所以首先想到的是swa ...
- Spring Boot 集成 Swagger 生成 RESTful API 文档
原文链接: Spring Boot 集成 Swagger 生成 RESTful API 文档 简介 Swagger 官网是这么描述它的:The Best APIs are Built with Swa ...
- springboot集成swagger2构建RESTful API文档
在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...
- Swagger+Spring mvc生成Restful接口文档
2019独角兽企业重金招聘Python工程师标准>>> Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端 ...
- Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档
项目现状:由于前后端分离,没有很好的前后端合作工具. 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型.HTTP头部信息.HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下 ...
- Spring Boot中使用Swagger2构建强大的RESTful API文档
由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...
- 超详细!使用swagger自动生成Api文档(swagger-ui)
介绍 swagger是什么? swagger-ui 使用swagger-ui 简单使用 swagger api注解 本文参考: 介绍 这里是一些介绍,如果想直接看如何使用,请直接跳过这部分.但如果有时 ...
- Spring Boot 集成Swagger2生成RESTful API文档
Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...
- Spring Cloud Zuul中使用Swagger汇总API接口文档
有很多读者问过这样的一个问题: 虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档 ...
最新文章
- MAC电脑快捷键整理
- boost::mp11::mp_at相关用法的测试程序
- 2011年全国软件大赛模拟题及参考答案(Java高职组)
- Synchronized总结
- 当下的力量 - [读书笔记]
- Linux赋予目录或文件任何人都可以读、写、执行的操作
- 雷军玩谐音梗:称米粉为“小粽子” 因为粽子“心中有MI”
- 【语音隐写】基于matlab DCT+DWT+SVD音频数字水印嵌入提取【含Matlab源码 1408期】
- [笔记]unity渲染相关各种方案总结
- 2019-2020年目标跟踪论文汇总
- 基于ESP8266芯片的实时温湿度传感器
- LAMP The requested URL /index.html was not found on this server.
- 程序员最新面试谈薪指南
- Ubuntu16.04 64位系统下面安装JDK1.7
- 商软B v5.4.1的登录验证分析
- 三、Unity2D游戏制作——角色制作
- antd Card组件默认选中
- 国内主要地图瓦片坐标系定义及计算原理
- 传智播客截图工具_Hanselminutes播客183:直播! 小工具,高清,网络摄像头,4G等...
- android 模拟器 haxm,Android模拟器不使用HAXM
热门文章
- 1019. 链表中的下一个更大节点
- 1295. 统计位数为偶数的数字
- Ubuntu16.04自动、手动安装MongoDB的详细教程
- 《论文笔记》Collaborative Monocular SLAM with Multiple Micro Aerial Vehicles
- python从excel中读取数据
- 10款 非常酷炫的网站首页焦点图 兼容ie浏览器
- 使用word2vec训练中文词向量
- Octave: 'rgb2gray' undefined error
- Python笔记四之操作文件
- [jquery]为jQuery.ajax添加onprogress事件