(三)Swagger配置多项目共用
重构了多个项目后,在联调接口时,查看api会发现Swagger在几个项目可用,有几个不可用,配置都一样,扫描也充分,那问题出在哪里呢?先仔细找了下Docket的源码,发现有这么个方法:
/**
* Predicate that matches RequestHandler with given base package name for the class of the handler method.
* This predicate includes all request handlers matching the provided basePackage
*
* @param basePackage - base package of the classes
* @return this
*/
public static Predicate<RequestHandler> basePackage(final String basePackage) {
return new Predicate<RequestHandler>() {
@Override
public boolean apply(RequestHandler input) {
return declaringClass(input).transform(handlerPackage(basePackage)).or(true);
}
};
}
而我们在配置中,就用到这个方法:
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
.title("some title")
.description("some description")
.termsOfServiceUrl("this is url")
.version("0.01")
.build())
.select()
.apis(RequestHandlerSelectors.basePackage("com.***.qaqc"))
.paths(PathSelectors.any())
.build();
由于整合了多个项目,每个项目的包命名规则不一致,扫描的包的规则没有完全匹配所有项目,导致有些可以访问Swagger有些不能访问,问题迎刃而解。
项目中是用JWT作为整个spring cloud项目的单点登录Token,如何让Swagger也可以支持,让我们在每次mock中都添加Authentication呢?遵循上面解决问题的思路,我们又找到了这个方法:
/**
* Adds default parameters which will be applied to all operations.
*
* @param operationParameters parameters which will be globally applied to all operations
* @return this Docket
*/
public Docket globalOperationParameters(List<Parameter> operationParameters) {
this.globalOperationParameters.addAll(nullToEmptyList(operationParameters));
return this;
}
只要按照方法添加合理的参数,功能就可以实现:
ParameterBuilder authParam = new ParameterBuilder();
List<Parameter> paramList = new ArrayList<>();
authParam.name(authHeader).description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false);
paramList.add(authParam.build());
docket.globalOperationParameters(paramList);
但还有部分项目是不需要做token校验的,也要保证其兼容性,那么我们可以稍微改造一下:
/**
* @author zhangqiuyang
* Created on 2018/4/21.
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Value("${system.auth.header:null}")
private String authHeader; /**
* 初始化api
*
* @return Docket
*/
@Bean
public Docket createRestApi() {
List<Parameter> paramList = null; if (!"null".equals(authHeader)) {
paramList = new ArrayList<>();
ParameterBuilder authParam = new ParameterBuilder();
authParam.name(authHeader).description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false);
paramList.add(authParam.build());
}
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
.title("**************")
.description("************")
.termsOfServiceUrl("http://www.komect.com/")
.version("0.01")
.build())
.select()
.apis(RequestHandlerSelectors.basePackage("com.cmhi.qaqc"))
.paths(PathSelectors.any())
.build();
if (paramList != null) {
docket.globalOperationParameters(paramList);
}
return docket;
}
}
(三)Swagger配置多项目共用的更多相关文章
- Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)
Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...
- vue-multi-module【多模块集成的vue项目,多项目共用一份配置,可以互相依赖,也可以独立打包部署】
基于 vue-cli 2 实现,vue 多模块.vue多项目集成工程 Github项目地址 : https://github.com/BothEyes1993/vue-multi-module 目标: ...
- 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 【转】第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
原文网址:http://www.cnblogs.com/smyhvae/p/4456420.html [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.c ...
- Ionic 入门与实战之第三章:Ionic 项目结构以及路由配置
原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第三章,主要对 Ionic 的项目结构作了介绍,并讲解了Ionic 中的路由概念以及相关配置. 原文发表于我的技术博客 1. Ioni ...
- 《Asp.Net Core3 + Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤
简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...
- 第三周——重新clone项目、配置并编译
重新clone项目的原因 因为实习尚未有公司邮箱,使用qq邮箱没有权限提交代码,因此使用晶哥的账号和gitlab, 但是git clone项目默认会关联账号(可能有某些配置项,但是找不到), idea ...
- webpack4.x 从零开始配置vue 项目(三)
目标 babel 转换ES6 语法 postCss 增强css功能,如自动增加前缀 vue-loader 解析vue 文件 实现基本的vue项目开发环境,打包等 Babel 由于浏览器对es6语法兼容 ...
- vue+webpack多个项目共用组件动态打包单个项目
原文复制:https://www.jianshu.com/p/fa19a07b1496 修改了一些东西,因为sh脚本不能再window电脑执行,所以改成了node脚本.这是基于vue-cli2.0配置 ...
随机推荐
- 让GIt忽略SSL证书错误的方法
当你通过HTTPS访问Git远程仓库,如果服务器的SSL证书未经过第三方机构签署,那么Git就会报错.这是十分合理的设计,毕竟未知的没有签署过的证书意味着很大安全风险.但是,如果你正好在架设Git服务 ...
- web worker技术-js新线程
web worker的小例子,用来入门很合适,建议启动服务来开发.可以使用node的anywhere. <!DOCTYPE html> <html lang="en&quo ...
- JSON 常量详情参考 (内含对中文不转义的参数)
JSON_ERROR_NONE (integer) 没有错误发生.自 PHP 5.3.0 起生效. JSON_ERROR_DEPTH (integer) 到达了最大堆栈深度.自 PHP 5.3.0 起 ...
- Android 6.0 动态权限申请
1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在 ...
- 音乐代码 (DNF天空之城、欢乐颂)。
太感人了 DNF天空之城 #include <cstdio> #include <windows.h> #define qdo 262 #define qre 294 #def ...
- linux 内存地址空间管理 mm_struct
http://blog.csdn.net/yusiguyuan/article/details/39520933 Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起 ...
- ABI是编译器的开发指南
http://blog.csdn.net/soaringlee_fighting/article/details/70214785 1) ABI: 二进制应用程序接口(Application Bina ...
- 前端高质量知识(四)-JS详细图解作用域链与闭包
攻克闭包难题 初学JavaScript的时候,我在学习闭包上,走了很多弯路.而这次重新回过头来对基础知识进行梳理,要讲清楚闭包,也是一个非常大的挑战. 闭包有多重要?如果你是初入前端的朋友,我没有办法 ...
- 字符串反转,栈模拟(ZOJ1151)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151 这里可以用栈模拟,也可以用STL,reverse();函数. 但 ...
- Buffer的使用
虽然知道了怎么实例化Buffer,但这还远远不够,因为Buffer类使随nodejs一起发布的核心库,Buffer不仅能处理tcp连接中发送接收的数据,也能处理图像或者是压缩文件,甚至说文件系统里面的 ...