SpringCloud网关整合Swagger在网关swagger-ui.html查看各个服务的接口
一.背景
微服务服务众多,在测试接口时每个服务整合Swagger要单独去访问每一个服务获取接口文档有点繁琐,现在利用网关的也整合Swagger访问网关就可以获取到所有服务的接口文档就大大的便利了我们的开发
二.使用
1.对于网关配置
添加pom依赖:
<!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>RELEASE</version> </dependency>
Swagger配置类: /** * Swagger配置类 */ @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("xxxx系统") .description("xxxxx接口文档说明") .termsOfServiceUrl("http://localhost:8092") .contact(new Contact("xx", "", "xxx@qq.com")) .version("1.0") .build(); } @Bean UiConfiguration uiConfig() { return new UiConfiguration(null, "list", "alpha", "schema", UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L); } }
swagger文档资源配置类: /** * swagger文档资源配置类 (重点swagger整合zuul配置) */ @Component @Primary public class DocumentationConfig implements SwaggerResourcesProvider { @Override public List<SwaggerResource> get() { List resources = new ArrayList<>(); resources.add(swaggerResource("后台管理服务", "/manage/v2/api-docs", "2.0")); resources.add(swaggerResource("文件管理服务", "/fastdfs/v2/api-docs", "2.0")); return resources; } private SwaggerResource swaggerResource(String name, String location, String version) { SwaggerResource swaggerResource = new SwaggerResource(); swaggerResource.setName(name); swaggerResource.setLocation(location); swaggerResource.setSwaggerVersion(version); return swaggerResource; } } 其中网关配置文件需要注意配置的
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8090/eureka/ (注册中心ip端口)
instance:
instance-id: ${spring.cloud.client.ip-address}:${server.port}
status-page-url: http://localhost:8092/swagger-ui.html (网关服务自己的ip端口)
prefer-ip-address: true
routes: #多路径映射
manage:
serviceId: hsdfas-manage
path: /manage/**
sensitiveHeaders: "*"
fastdfs:
serviceId: hsdfas-fastdfs
path: /fastdfs/**
sensitiveHeaders: "*"
2.对于其他服务(这里我只列出一个例子)后台管理服务manage
pom依赖添加:
<!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>RELEASE</version> </dependency>
Swagger配置类: /** * Swagger配置类 */ @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.huajie.manage")) (扫描自己接口的包) .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("后台管理服务api") .description("后台管理服务接口文档说明") .contact(new Contact("your name", "", "xxx@qq.com")) .version("1.0") .build(); } @Bean UiConfiguration uiConfig() { return new UiConfiguration(null, "list", "alpha", "schema", UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, false, true, 60000L); } }
对于controller接口
/** * 部门信息 */ @RestController @Api(tags = "部门模块接口", description = "后台管理服务部门模块接口") @RequestMapping("/system/dept") public class DeptController extends BaseController { @Autowired private IDeptService deptService; /** * @param dept 部门查询信息 * @param nowUserId 目前用户id * @return AjaxResult 结果 * @description 获取机构信息列表 * @author xxx * @date 2019/1/9 */ @ApiOperation(value = "获取机构信息列表") @GetMapping("/list") public AjaxResult list(Dept dept, @RequestParam("nowUserId") Long nowUserId) { List<Dept> deptList = deptService.selectDeptList(dept, nowUserId); return toAjaxList(deptList); } 以上就是基本使用步骤,大致满足开发需求,下面仅仅是补充其它注解标签:
@Api() 用于类;表示标识这个类是swagger的资源
tags–表示说明
value–也是说明,可以使用tags替代
@ApiOperation() 用于方法;表示一个http请求的操作
value用于方法描述
notes用于提示内容
@ApiParam() 用于方法,参数,字段说明;表示对参数的添加元数据(说明或是否必填等)
name–参数名
value–参数说明
required–是否必填
@ApiModel()用于类 ;表示对类进行说明,用于参数用实体类接收
value–表示对象名
@ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改
value–字段说明
name–重写属性名字
dataType–重写属性类型
required–是否必填
example–举例说明
hidden–隐藏
@ApiImplicitParam() 用于方法
表示单独的请求参数
@ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam
name–参数ming
value–参数说明
dataType–数据类型
paramType–参数类型
example–举例说明
@ApiIgnore
作用于方法上,使用这个注解swagger将忽略这个接口
- 详解Hadoop HA 如何运作
- Linux时间时区详解与常用时间函数
- 基于Linux整形时间的常用计算思路
- 如何追踪每一笔记录的来龙去脉:一个完整的Audit Logging解决方案[上篇]
- WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?
- Linux64位程序移植
- history命令使用方法详解
- Linux删除乱码文件的方法
- 和智能机器一起工作,而不是惧怕它们
- Hulu大数据架构与应用经验
- SQL Server 2005:一个使用新创建的User的问题和解决方法
- Audit Logging-Stored Procedure
- Linux进程间通信(四) - 共享内存
- 扩展UltraGrid控件实现对所有数据行的全选功能[Source Code下载]
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- Android底部导航栏的动态替换方案
- Android自定义View实现饼状图带动画效果
- Android音视频之视频采集(系统API预览)
- 在Node.js中使用Multer进行文件上传
- Android实现自动填充短信验证码功能
- django项目中新增app的2种实现方法
- 如何使用Node.js编辑XML文件
- Windows下安装yarn的三种方法
- python topk()函数求最大和最小值实例
- 详解Ubuntu环境下部署Django+uwsgi+nginx总结
- 如何从Node.js中的命令行读取输入
- pyqt5中动画的使用详解
- PyQt使用QPropertyAnimation开发简单动画
- 如何使用JavaScript漂亮地打印JSON对象
- Android使用AsyncTask加载图片的操作流程