(三)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配置 ...
随机推荐
- OAuth2.0和企业内部统一登录,token验证方式,OAuth2.0的 Authorization code grant 和 Implicit grant区别
统一登录是个很多应用系统都要考虑的问题,多个项目的话最好前期进行统一设计,否则后面改造兼容很麻烦: cas认证的方式:新公司都是老项目,用的是cas认证的方式,比较重而且依赖较多,winform的项目 ...
- 小程序 页面到详情的id传递
比如电影列表页跳转到电影详情页 在movie.js获取movieId; processDoubanData: function (moviesDouban, settedKey, categoryTi ...
- asp.net 单元测试(转)
最早接触单元测试是看了极限编程相关资料里边讲的测试驱动开发,然后下载了Nunit研究了一下,但并没产生多大的触动,因为那个时候做的都是些时间紧任务重的事情,对于单元测试的直接感觉就是有可能比较费时间. ...
- node.js的介绍
1.node.js的优点 性能高 开发效率高 应用范围广 2.安装 下载地址:http://nodejs.cn 下载git 3.框架选择 express(成熟),koa,Hapi
- css多行文本溢出显示省略号
HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...
- C++ Knowledge series STL & Const
Thank to the pepole who devote theirself to the common libs. STL(http://www.cplusplus.com/reference/ ...
- django choice字段模板展示
class UserInfo(AbstractUserInfo): """ 用户表 """ gender_choice = ( (1,&qu ...
- Java —异常
异常简介 有异于常态,和正常情况不一样,有错误出现,阻止当前方法或作用域,称为异常. Java中的异常类都继承Throwable类,它有两个子类:Error和Exception.Error很少接触,主 ...
- PowerMock学习笔记,对单例的测试方法
对单例进行mock 单例类 public class PmModelHandler { // 包含要mock掉的成员变量 private static LogService logger = LogS ...
- Linux目录配置——Linux目录配置标准:FHS
事实上,FHS针对目录树架构仅定义出三层目录下应该放置哪些数据,分别是下面三个目录: 一./(根目录):与开机系统有关 根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一 ...