在resources目录下新建meta-INF/spring.factorsorg.springframework.boot spring-boot-starter-aop1.5.19.RELEASE io.springfox springfox-swagger22.9.2 io.swagger swagger-modelsio.swagger swagger-models1.5.21 com.github.xiaoymin swagger-bootstrap-ui1.9.6
org.springframework.boot.autoconfigure.EnableAutoConfiguration= com.demo.swagger.SwaggerAutoConfigurationSwaggerProperties
package com.demo.swagger; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.linkedHashMap; import java.util.List; import java.util.Map; @Component public class SwaggerProperties { private Boolean enabled; private String title = "Swagger"; private String description = "swagger"; private String version = "1.0.1"; private String license = ""; private String licenseUrl = ""; private String termsOfServiceUrl = ""; private Contact contact = new Contact(); private String basePackage = ""; private ListSwaggerAutoConfigurationbasePath = new ArrayList<>(); private List excludePath = new ArrayList<>(); private Map docket = new linkedHashMap<>(); private String host = ""; private List globalOperationParameters; public static class GlobalOperationParameter { private String name; private String description; private String modelRef; private String parameterType; private String required; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getModelRef() { return modelRef; } public void setModelRef(String modelRef) { this.modelRef = modelRef; } public String getParameterType() { return parameterType; } public void setParameterType(String parameterType) { this.parameterType = parameterType; } public String getRequired() { return required; } public void setRequired(String required) { this.required = required; } } public static class DocketInfo { private String title = ""; private String description = ""; private String version = ""; private String license = ""; private String licenseUrl = ""; private String termsOfServiceUrl = ""; private Contact contact = new Contact(); private String basePackage = ""; private List basePath = new ArrayList<>(); private List excludePath = new ArrayList<>(); private List globalOperationParameters; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getLicense() { return license; } public void setLicense(String license) { this.license = license; } public String getLicenseUrl() { return licenseUrl; } public void setLicenseUrl(String licenseUrl) { this.licenseUrl = licenseUrl; } public String getTermsOfServiceUrl() { return termsOfServiceUrl; } public void setTermsOfServiceUrl(String termsOfServiceUrl) { this.termsOfServiceUrl = termsOfServiceUrl; } public Contact getContact() { return contact; } public void setContact(Contact contact) { this.contact = contact; } public String getbasePackage() { return basePackage; } public void setbasePackage(String basePackage) { this.basePackage = basePackage; } public List getbasePath() { return basePath; } public void setbasePath(List basePath) { this.basePath = basePath; } public List getExcludePath() { return excludePath; } public void setExcludePath(List excludePath) { this.excludePath = excludePath; } public List getGlobalOperationParameters() { return globalOperationParameters; } public void setGlobalOperationParameters(List globalOperationParameters) { this.globalOperationParameters = globalOperationParameters; } } public static class Contact { private String name = "admin"; private String url = "admin.com"; private String email = "admin@admin.com"; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } public Boolean getEnabled() { return enabled; } public void setEnabled(Boolean enabled) { this.enabled = enabled; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getLicense() { return license; } public void setLicense(String license) { this.license = license; } public String getLicenseUrl() { return licenseUrl; } public void setLicenseUrl(String licenseUrl) { this.licenseUrl = licenseUrl; } public String getTermsOfServiceUrl() { return termsOfServiceUrl; } public void setTermsOfServiceUrl(String termsOfServiceUrl) { this.termsOfServiceUrl = termsOfServiceUrl; } public Contact getContact() { return contact; } public void setContact(Contact contact) { this.contact = contact; } public String getbasePackage() { return basePackage; } public void setbasePackage(String basePackage) { this.basePackage = basePackage; } public List getbasePath() { return basePath; } public void setbasePath(List basePath) { this.basePath = basePath; } public List getExcludePath() { return excludePath; } public void setExcludePath(List excludePath) { this.excludePath = excludePath; } public Map getDocket() { return docket; } public void setDocket(Map docket) { this.docket = docket; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public List getGlobalOperationParameters() { return globalOperationParameters; } public void setGlobalOperationParameters(List globalOperationParameters) { this.globalOperationParameters = globalOperationParameters; } }
package com.demo.swagger; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Lists; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.import; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.*; import springfox.documentation.spi.documentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; import java.util.*; import java.util.stream.Collectors; @import( { Swagger2Configuration.class }) public class SwaggerAutoConfiguration implements BeanFactoryAware { private static final String AUTH_KEY = "Authorization"; private BeanFactory beanFactory; @Bean @ConditionalOnMissingBean public SwaggerProperties swaggerProperties() { return new SwaggerProperties(); } @Bean @ConditionalOnMissingBean @ConditionalOnProperty(name = "com.swagger.enabled", matchIfMissing = true) public ListSwagger2ConfigurationcreateRestApi(SwaggerProperties swaggerProperties) { ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory; List docketList = new linkedList<>(); if (swaggerProperties.getDocket().size() == 0) { final Docket docket = createDocket(swaggerProperties); configurableBeanFactory.registerSingleton("defaultDocket", docket); docketList.add(docket); return docketList; } for (String groupName : swaggerProperties.getDocket().keySet()) { SwaggerProperties.DocketInfo docketInfo = swaggerProperties.getDocket().get(groupName); ApiInfo apiInfo = new ApiInfoBuilder() .title(docketInfo.getTitle().isEmpty() ? swaggerProperties.getTitle() : docketInfo.getTitle()) .description(docketInfo.getDescription().isEmpty() ? swaggerProperties.getDescription() : docketInfo.getDescription()) .version(docketInfo.getVersion().isEmpty() ? swaggerProperties.getVersion() : docketInfo.getVersion()) .license(docketInfo.getLicense().isEmpty() ? swaggerProperties.getLicense() : docketInfo.getLicense()) .licenseUrl(docketInfo.getLicenseUrl().isEmpty() ? swaggerProperties.getLicenseUrl() : docketInfo.getLicenseUrl()) .contact(new Contact( docketInfo.getContact().getName().isEmpty() ? swaggerProperties.getContact().getName() : docketInfo.getContact().getName(), docketInfo.getContact().getUrl().isEmpty() ? swaggerProperties.getContact().getUrl() : docketInfo.getContact().getUrl(), docketInfo.getContact().getEmail().isEmpty() ? swaggerProperties.getContact().getEmail() : docketInfo.getContact().getEmail() )) .termsOfServiceUrl(docketInfo.getTermsOfServiceUrl().isEmpty() ? swaggerProperties.getTermsOfServiceUrl() : docketInfo.getTermsOfServiceUrl()) .build(); if (docketInfo.getbasePath().isEmpty()) { docketInfo.getbasePath().add(" private List assemblyGlobalOperationParameters( List globalOperationParameters, List docketOperationParameters) { if (Objects.isNull(docketOperationParameters) || docketOperationParameters.isEmpty()) { return buildGlobalOperationParametersFromSwaggerProperties(globalOperationParameters); } Set docketNames = docketOperationParameters.stream() .map(SwaggerProperties.GlobalOperationParameter::getName) .collect(Collectors.toSet()); List resultOperationParameters = Lists.newArrayList(); if (Objects.nonNull(globalOperationParameters)) { for (SwaggerProperties.GlobalOperationParameter parameter : globalOperationParameters) { if (!docketNames.contains(parameter.getName())) { resultOperationParameters.add(parameter); } } } resultOperationParameters.addAll(docketOperationParameters); return buildGlobalOperationParametersFromSwaggerProperties(resultOperationParameters); } }
package com.demo.swagger; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.import; import springfox.documentation.swagger2.configuration.Swagger2documentationConfiguration; @Configuration @ConditionalOnProperty(name = "com.demo.swagger.enabled", matchIfMissing = true) @import({ Swagger2documentationConfiguration.class }) public class Swagger2Configuration { }
在项目的pom文件中引入swagger,并在配置文件中配置com.demo.swagger.enabled,即可使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)