jiangping
2024-12-27 951d65a44165825ad8d323108236a6647467c21a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.doumee.config.swagger;
 
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
 
import java.util.function.Predicate;
 
/**
 * Swagger配置
 * @author Eva.Caesar Liu
 * @date 2022/03/11 10:24
 */
@Configuration
@EnableOpenApi
@EnableKnife4j
public class SwaggerConfig {
 
    @Value("${swagger.host:}")
    private String host;
    @Value("${swagger.enabled:}")
    private Boolean enabled;
 
    @Value("${swagger.title:接口文档}")
    private String title;
 
    @Value("${swagger.description:}")
    private String description;
 
    @Value("${project.version:}")
    private String version;
 
    @Bean
    public ApiInfo getApiInfo() {
        return new ApiInfoBuilder()
                .title(title)
                .description(description)
                .version(version)
                .build();
    }
 /*   @Bean
    public Docket getDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(this.getApiInfo()).groupName("【系统管理接口API】")
                .host(host)
                .select()
                .apis( basePackage("com.doumee.api.system;"))
                // 设置需要被扫描的类,这里设置为添加了@Api注解的类
//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                .paths(PathSelectors.any())
                .build();
    }*/
    @Bean
    public Docket getDocket2() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(this.getApiInfo()).groupName("default")
                .host(host)
                .enable(enabled)
                .select()
                .apis( basePackage("com.doumee.cloud;com.doumee.api.common"))
                // 设置需要被扫描的类,这里设置为添加了@Api注解的类
//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                .paths(PathSelectors.any())
                .build();
    }
/*
    @Bean
    public Docket getDocket2() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(this.getApiInfo()).groupName("default")
                .host(host)
                .select()
                .apis( basePackage("com.doumee.api.system;com.doumee.api.business;com.doumee.api.common"))
                // 设置需要被扫描的类,这里设置为添加了@Api注解的类
//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                .paths(PathSelectors.any())
                .build();
    }
*/
   /* @Bean
    public Docket getDocket1() {
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(this.getApiInfo()).groupName("【公共接口API】")
            .host(host)
            .select()
            .apis( basePackage("com.doumee.api.common"))
            // 设置需要被扫描的类,这里设置为添加了@Api注解的类
//                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
            .paths(PathSelectors.any())
            .build();
    }*/
    /**
     * 重写basePackage方法,使能够实现多包访问,复制贴上去
     * @author  teavamc
     * @date 2019/1/26
     * @return com.google.common.base.Predicate<springfox.documentation.RequestHandler>
     */
    public static Predicate<RequestHandler> basePackage(String basePackage) {
        return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
    }
 
    private static Function<Class<?>, Boolean> handlerPackage(String basePackage)     {
        return input -> {
            // 循环判断匹配
            for (String strPackage : basePackage.split(";")) {
                boolean isMatch = input.getPackage().getName().startsWith(strPackage);
                if (isMatch) {
                    return true;
                }
            }
            return false;
        };
    }
 
    private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
        return Optional.fromNullable(input.declaringClass());
    }
}