重构了多个项目后,在联调接口时,查看api会发现Swagger在几个项目可用,有几个不可用,配置都一样,扫描也充分,那问题出在哪里呢?先仔细找了下Docket的源码,发现有这么个方法:

  1. /**
  2. * Predicate that matches RequestHandler with given base package name for the class of the handler method.
  3. * This predicate includes all request handlers matching the provided basePackage
  4. *
  5. * @param basePackage - base package of the classes
  6. * @return this
  7. */
  8. public static Predicate<RequestHandler> basePackage(final String basePackage) {
  9. return new Predicate<RequestHandler>() {
  10. @Override
  11. public boolean apply(RequestHandler input) {
  12. return declaringClass(input).transform(handlerPackage(basePackage)).or(true);
  13. }
  14. };
  15. }

而我们在配置中,就用到这个方法:

  1. return new Docket(DocumentationType.SWAGGER_2)
  2. .apiInfo(new ApiInfoBuilder()
  3. .title("some title")
  4. .description("some description")
  5. .termsOfServiceUrl("this is url")
  6. .version("0.01")
  7. .build())
  8. .select()
  9. .apis(RequestHandlerSelectors.basePackage("com.***.qaqc"))
  10. .paths(PathSelectors.any())
  11. .build();

由于整合了多个项目,每个项目的包命名规则不一致扫描的包的规则没有完全匹配所有项目,导致有些可以访问Swagger有些不能访问,问题迎刃而解。


项目中是用JWT作为整个spring cloud项目的单点登录Token,如何让Swagger也可以支持,让我们在每次mock中都添加Authentication呢?遵循上面解决问题的思路,我们又找到了这个方法:

  1. /**
  2. * Adds default parameters which will be applied to all operations.
  3. *
  4. * @param operationParameters parameters which will be globally applied to all operations
  5. * @return this Docket
  6. */
  7. public Docket globalOperationParameters(List<Parameter> operationParameters) {
  8. this.globalOperationParameters.addAll(nullToEmptyList(operationParameters));
  9. return this;
  10. }

只要按照方法添加合理的参数,功能就可以实现:

  1. ParameterBuilder authParam = new ParameterBuilder();
  2. List<Parameter> paramList = new ArrayList<>();
  3. authParam.name(authHeader).description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false);
  4. paramList.add(authParam.build());
  5. docket.globalOperationParameters(paramList);

但还有部分项目是不需要做token校验的,也要保证其兼容性,那么我们可以稍微改造一下:

  1. /**
  2. * @author zhangqiuyang
  3. * Created on 2018/4/21.
  4. */
  5. @Configuration
  6. @EnableSwagger2
  7. public class SwaggerConfig {
  8. @Value("${system.auth.header:null}")
  9. private String authHeader;
  10.  
  11. /**
  12. * 初始化api
  13. *
  14. * @return Docket
  15. */
  16. @Bean
  17. public Docket createRestApi() {
  18. List<Parameter> paramList = null;
  19.  
  20. if (!"null".equals(authHeader)) {
  21. paramList = new ArrayList<>();
  22. ParameterBuilder authParam = new ParameterBuilder();
  23. authParam.name(authHeader).description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false);
  24. paramList.add(authParam.build());
  25. }
  26. Docket docket = new Docket(DocumentationType.SWAGGER_2)
  27. .apiInfo(new ApiInfoBuilder()
  28. .title("**************")
  29. .description("************")
  30. .termsOfServiceUrl("http://www.komect.com/")
  31. .version("0.01")
  32. .build())
  33. .select()
  34. .apis(RequestHandlerSelectors.basePackage("com.cmhi.qaqc"))
  35. .paths(PathSelectors.any())
  36. .build();
  37. if (paramList != null) {
  38. docket.globalOperationParameters(paramList);
  39. }
  40. return docket;
  41. }
  42. }

(三)Swagger配置多项目共用的更多相关文章

  1. Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)

    Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...

  2. vue-multi-module【多模块集成的vue项目,多项目共用一份配置,可以互相依赖,也可以独立打包部署】

    基于 vue-cli 2 实现,vue 多模块.vue多项目集成工程 Github项目地址 : https://github.com/BothEyes1993/vue-multi-module 目标: ...

  3. 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. 【转】第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    原文网址:http://www.cnblogs.com/smyhvae/p/4456420.html [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.c ...

  5. Ionic 入门与实战之第三章:Ionic 项目结构以及路由配置

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第三章,主要对 Ionic 的项目结构作了介绍,并讲解了Ionic 中的路由概念以及相关配置. 原文发表于我的技术博客 1. Ioni ...

  6. 《Asp.Net Core3 + Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...

  7. 第三周——重新clone项目、配置并编译

    重新clone项目的原因 因为实习尚未有公司邮箱,使用qq邮箱没有权限提交代码,因此使用晶哥的账号和gitlab, 但是git clone项目默认会关联账号(可能有某些配置项,但是找不到), idea ...

  8. webpack4.x 从零开始配置vue 项目(三)

    目标 babel 转换ES6 语法 postCss 增强css功能,如自动增加前缀 vue-loader 解析vue 文件 实现基本的vue项目开发环境,打包等 Babel 由于浏览器对es6语法兼容 ...

  9. vue+webpack多个项目共用组件动态打包单个项目

    原文复制:https://www.jianshu.com/p/fa19a07b1496 修改了一些东西,因为sh脚本不能再window电脑执行,所以改成了node脚本.这是基于vue-cli2.0配置 ...

随机推荐

  1. Xtrareport 报表的一些属性及控件

    基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控件. ...

  2. oracle用分隔符分割字段,并转为多行

    作用:当判断是否满足条件,而条件字段又是用","分割的时候. 如果数据库中一个字段插入数据,并且以","分割.有点像行转列 4804510101,4946645 ...

  3. 2019.3.26判断是否回文(java实现)

    我所有的文章都是对我总结学习的总结,那里不好或者冒犯了那里,我先对您说声对不起,请告知我进行改正. 今天java老师作业题目是判断是一个字符串否是回文: emmmm,我的思路是将字符串逆序,然后使用方 ...

  4. Spring Bean相互依赖问题

    如果是通过get,set 注入就不会有问题 如果是通过构造函数注入,SPRING就会报循环引用注入出错 循环依赖——在采用构造器注入的方式配置bean时,很有可能会产生循环依赖的情况.比如说,一个类A ...

  5. spring mvc改造成spring boot

    一.新增依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  6. spring笔记4-事务管理

    一.xml配置文件形式 通过转账案例,学习事务管理 1.建立数据库 2.编写entity package huguangqin.com.cnblogs.entity; public class Use ...

  7. SQLServer 连接和联合

    一.内连接(inner join) 默认省略inner ,内连接是严格过滤,等同where限制,连接两端的表都数据都需要过滤. 二.左外连接(left outer join) 以左表为基准进行数据连接 ...

  8. 被遗忘的设计模式——空对象模式(Null Object Pattern)

    GoF(四人帮)那本<设计模式 可复用面向对象软件的基础>可谓是设计模式方面的经典之作,其中介绍的23种设计模式, 也可谓是经典中的经典.但是,设计模式的种类绝不仅仅是这23种,除此之外还 ...

  9. 诸葛io | 精细化运营分析解决方案

    类型: 定制服务 软件包: business intelligence internet media solution collateral 联系服务商 产品详情 解决方案 概要 数据监测 ? 异常发 ...

  10. centreon公司推出的check plugin pack

    文档 http://documentation.centreon.com/docs/centreon-plugins/en/latest/ (epel) # yum install nagios-pl ...