关于springfox swagger-ui多个包路径扫描匹配的改造支持---摘抄

使用springfox中的 RequestHandlerSelectors.basePackage("com.xxx") 只能支持单个包路径的扫描匹配,

如果要想支持多个包路径的匹配我们需要修改springfox里面的代码来支持他,现做以下修改来支持多包路径匹配。

 
  1. package com.xxx.swagger;

  2.  
  3. import org.springframework.beans.factory.annotation.Value;

  4. import org.springframework.context.annotation.Bean;

  5. import org.springframework.context.annotation.Configuration;

  6. import org.springframework.context.annotation.PropertySource;

  7. import org.springframework.context.annotation.PropertySources;

  8.  
  9. import springfox.documentation.RequestHandler;

  10. import springfox.documentation.builders.ApiInfoBuilder;

  11. import springfox.documentation.builders.PathSelectors;

  12. import springfox.documentation.service.ApiInfo;

  13. import springfox.documentation.spi.DocumentationType;

  14. import springfox.documentation.spring.web.plugins.Docket;

  15. import springfox.documentation.swagger2.annotations.EnableSwagger2;

  16.  
  17. import com.google.common.base.Function;

  18. import com.google.common.base.Optional;

  19. import com.google.common.base.Predicate;

  20.  
  21. /**

  22. * Swagger2 UI配置

  23. *

  24. *

  25. * 通过访问http://your ip:8090/api/swagger-ui.html查看发布的REST接口;

  26. *

  27. *

  28. * @author 许畅

  29. * @since JDK1.7

  30. * @version 2017年10月19日 许畅 新建

  31. */

  32. @Configuration

  33. @PropertySources({ @PropertySource(value = "classpath:swagger2.properties", ignoreResourceNotFound = true, encoding = "UTF-8") })

  34. @EnableSwagger2

  35. public class Swagger2UIConfig {

  36.  
  37. /**

  38. * 获取API标题

  39. */

  40. @Value("${swagger2.title}")

  41. public String title = "Spring Boot中使用Swagger2构建Restful API";

  42.  
  43. /**

  44. * Swagger2创建Docket的Bean

  45. *

  46. * @return Docket

  47. */

  48. @Bean

  49. public Docket createRestApi() {

  50. return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()

  51. .apis(Swagger2UIConfig.basePackage("com.xxx1,com.xxx2")).paths(PathSelectors.any()).build();

  52. }

  53.  
  54. /**

  55. * Predicate that matches RequestHandler with given base package name for the class of the handler method.

  56. * This predicate includes all request handlers matching the provided basePackage

  57. *

  58. * @param basePackage - base package of the classes

  59. * @return this

  60. */

  61. public static Predicate basePackage(final String basePackage) {

  62. return new Predicate() {

  63.  
  64. @Override

  65. public boolean apply(RequestHandler input) {

  66. return declaringClass(input).transform(handlerPackage(basePackage)).or(true);

  67. }

  68. };

  69. }

  70.  
  71. /**

  72. * 处理包路径配置规则,支持多路径扫描匹配以逗号隔开

  73. *

  74. * @param basePackage 扫描包路径

  75. * @return Function

  76. */

  77. private static Function, Boolean> handlerPackage(final String basePackage) {

  78. return new Function, Boolean>() {

  79.  
  80. @Override

  81. public Boolean apply(Class input) {

  82. for (String strPackage : basePackage.split(",")) {

  83. boolean isMatch = input.getPackage().getName().startsWith(strPackage);

  84. if (isMatch) {

  85. return true;

  86. }

  87. }

  88. return false;

  89. }

  90. };

  91. }

  92.  
  93. /**

  94. * @param input RequestHandler

  95. * @return Optional

  96. */

  97. private static Optional> declaringClass(RequestHandler input) {

  98. return Optional.fromNullable(input.declaringClass());

  99. }

  100.  
  101. /**

  102. * Swagger2创建该Api的基本信息

  103. *

  104. * @return ApiInfo

  105. */

  106. @Bean

  107. public ApiInfo apiInfo() {

  108. return new ApiInfoBuilder().title(title)

  109. .description("更多Swagger2配置相关文章请关注:https://springfox.github.io/springfox/docs/current/")

  110. .termsOfServiceUrl("https://springfox.github.io/springfox/docs/current/").version("1.0").build();

  111. }

  112.  
  113. }

你可能感兴趣的:(关于springfox swagger-ui多个包路径扫描匹配的改造支持---摘抄)