(三)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配置 ...
随机推荐
- Asp.Net MVC 5 Razor 视图 未将对象引用到实例
未将对象引用到实例的错误居然指向了@{Leyout=“..此处略,核实路径无误”}. 最后发现原来是在一个<select .. name="@Model.Category"& ...
- Vue.js基础语法(二)组件
vue学习的一系列,全部来自于表哥---表严肃,是我遇到过的讲课最通透,英文发音最好听的老师,想一起听课就去这里吧 https://biaoyansu.com/i/hzhj1206 把一段经常要用的东 ...
- 《Head First 设计模式》总结
复合模式——模式的模式 MVC(模型-视图-控制器):是由数个设计模式结合起来的模式. 戴着模式的有色眼镜看MVC: 模型利用观察者模式让控制器和视图可以随最新的状态改变而更新. 模型对视图和控制器一 ...
- Gulp工具常用插件
gulp-uglify(js压缩) gulp-uglify安装 // npm install --save-dev gulp-uglify 已过时 npm install --save-dev jsh ...
- ASP.NET MVC 音乐商店 - 1 创建项目
我们的项目从在 Visual Studio 中的文件菜单中选择“新建”,选择“项目”开始. 然后,选择 C# 中的 Web 模板组,在右边的项目模板中选择 ASP.NET MVC3 Web 应用程序, ...
- [转c#]记录程序耗时的方法
多时候需要输出程序耗时,然后记录下来, 总是在程序执行开始记录当前时间点,在结尾记录结束时间点,然后两个时间相减, 那么有没有其他稍微像样点的方法呢? 告诉你,有滴 ; ) 这个方法主体就是 ...
- 【Node.js】初识Node.js
因组里项目需要,我和另外一名同事要学习Node.js.之前接触过Javascript,都是前台处理html时用到,现在要用Javascript做后端,学习Node.js,用一段时间专心学习一门新技术, ...
- vsftpd配置
yum -y install vsftpd useradd upload -s /sbin/nologin passwd upload mkdir /data/upload chown -R upol ...
- union和struct的区别之处,在于内存的共享上
首先看看union,在c++中,union可能没有多大用处,在c语言中,可能我们要借助其完成很多巧妙的设计,下面是其一个完整的定义: union UTest { ...
- PHP : url中出现乱码问题
例子: 在html中,将数据传到url中 当我点击“提交回复”后,跳转页面中将显示: 我们获取这个参数: 但是由于传过来的参数是中文,url会进行自动的解析成二进制的代码,那我们后台接受到的数据是解析 ...