前言
当前记录 swagger2
在 spingboot
中配置多个 spec
。
其中包括:
yml
配置全局的 Docket
yml
配置局部的 Docket
,不同的 spec
使用不同的描述
Docket
扫描基础包
SpringBoot
自定义配置(List
、Map
)
新建一个 module
主要依赖
<swagger.version>2.9.2</swagger.version>
1 2 3 4 5 6 7 8 9 10 11
| <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${swagger.version}</version> </dependency>
|
自定义配置类
ApiInfoProperties
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
|
@Configuration("apiInfoProperties") @ConfigurationProperties(prefix = "gt.boot.swagger.api-info") @Data public class ApiInfoProperties {
private String title;
private String description;
private String version;
private String termsOfServiceUrl;
private String license;
private String licenseUrl;
private ContactProperties contact;
private List<StringVendorExtension> vendorExtensions;
private Map<String, ApiInfoProperties> docketAppInfos; }
|
1 2 3 4 5 6 7 8 9 10 11 12
| /** * swagger 联系人信息 * * @author maxzhao * @date 2021-04-21 08:42 */ @Data public class ContactProperties { private String name; private String url; private String email; }
|
Docket
动态配置
ApiInfoConfig
当前类中包含了全局配置与局部配置。
getApiInfoByGroupName
获取局部配置,局部配置不存在,则使用全局配置。
InitializingBean
作用在于初始化 bean
时,会在之前构建 ApiInfo
信息。
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
| import lombok.Data; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact;
import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; import java.util.Optional;
@Configuration @Data public class ApiInfoConfig implements InitializingBean { @Resource(name = "apiInfoProperties") private ApiInfoProperties apiInfoProperties;
private static final ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
private static final Map<String, ApiInfoBuilder> docketApiInfo = new HashMap<>();
@Override public void afterPropertiesSet() throws Exception { initGlobal(apiInfoBuilder, apiInfoProperties); Map<String, ApiInfoProperties> groupAppInfos = apiInfoProperties.getDocketAppInfos(); if (groupAppInfos == null || groupAppInfos.isEmpty()) { return; } ApiInfoBuilder apiInfoBuilderTemp; for (Map.Entry<String, ApiInfoProperties> docket : groupAppInfos.entrySet()) { apiInfoBuilderTemp = new ApiInfoBuilder(); initGlobal(apiInfoBuilderTemp, docket.getValue()); docketApiInfo.put(docket.getKey(), apiInfoBuilderTemp); } }
public static ApiInfo getApiInfo(String title) { return apiInfoBuilder.title(title).build(); }
public static ApiInfo getApiInfoByGroupName(String groupName) { return Optional.ofNullable(docketApiInfo.get(groupName)) .orElse(apiInfoBuilder.title(groupName)) .build(); }
public static ApiInfo getApiInfo(String title, String description) { return apiInfoBuilder.title(title) .description(description).build(); }
private static void initGlobal(ApiInfoBuilder apiInfoBuilder, ApiInfoProperties apiInfoProperties) { ContactProperties contact = apiInfoProperties.getContact(); apiInfoBuilder.title(apiInfoProperties.getTitle()) .description(apiInfoProperties.getDescription()); if (contact != null) { apiInfoBuilder.contact(new Contact(contact.getName(), contact.getUrl(), contact.getEmail())); } apiInfoBuilder.version(apiInfoProperties.getVersion()) .termsOfServiceUrl(apiInfoProperties.getTermsOfServiceUrl()) .license(apiInfoProperties.getLicense()) .licenseUrl(apiInfoProperties.getLicenseUrl()); } }
|
Docket
注册
下面注册一个 FileServer
的文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Bean("file-server") public Docket fileServerApi(){ log.debug("=================== swagger2 docket create file-server ================="); return new Docket(DocumentationType.SWAGGER_2) .groupName("FileServer") .apiInfo(ApiInfoConfig.getApiInfoByGroupName("FileServer")) .select() .apis(RequestHandlerSelectors.basePackage("gt.maxzhao.boot.file.server")) .paths(PathSelectors.any()) .build(); }
|
本文地址: https://github.com/maxzhao-it/blog/post/57187/