spring boot 集成 springfox 3.0.0
springfox 3.0.0 上线之后,调整自己的工程
1. pom中添加依赖
io.springfox
springfox-boot-starter
3.0.0
2. 在main主入口中添加注解@EnableOpenApi
@SpringBootApplication
@EnableOpenApi
public class SpringfoxApplication {
public static void main(String[] args) {
SpringApplication.run(SpringfoxApplication.class, args);
}
}
3. 配置swaaper UI的配置
package com.example.springfox.config;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootVersion;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.config.annotation.*;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
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.lang.reflect.Field;
import java.util.*;
/**
* @author: hett
* @date: 2022/1/14 15:19
*/
@Configuration
@EnableOpenApi
public class SwaggerUIConfig implements WebMvcConfigurer {
@Value("${springfox.documentation.swagger-ui.base-url}")
private String baseUrl;
@Value("${springfox.documentation.swagger-ui.enabled}")
private boolean enbale;
@Value("${spring.application.name}")
private String applicationName;
@Value("${spring.swagger.description}")
private String description;
@Value("${spring.swagger.contact.name}")
private String contactName;
@Value("${spring.swagger.contact.url}")
private String contactURL;
@Value("${spring.swagger.contact.email}")
private String contactEmail;
@Value("${spring.swagger.version}")
private String version;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String baseUrl = StringUtils.trimTrailingCharacter(this.baseUrl,'/');
registry.addResourceHandler(baseUrl+"/swagger-ui/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
.resourceChain(false);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController(baseUrl+"/swagger-ui/")
.setViewName("forward:"+baseUrl+"/swagger-ui/index.html");
}
@Bean
public Docket createAPI(){
return new Docket(DocumentationType.SWAGGER_2)
.pathMapping("/")
.enable(enbale)
.apiInfo(apiInfo())
.host(baseUrl)
.select()
.apis(RequestHandlerSelectors.any())
.build()
.protocols(newHashSet("https","http"))
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
private List securityContexts() {
return Collections.singletonList(
SecurityContext.builder()
.securityReferences(Collections.singletonList(new SecurityReference("BASE_TOKEN",new AuthorizationScope[]{new AuthorizationScope("global","")})))
.build()
);
}
private List securitySchemes() {
ApiKey apiKey = new ApiKey("BASE_TOKEN","token", In.HEADER.toValue());
return Collections.singletonList(apiKey);
}
@SafeVarargs
private final <T> Set<T> newHashSet(T... ts) {
if (ts.length >0){
return new LinkedHashSet<>(Arrays.asList(ts));
}
return null;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(applicationName+"Api Doc")
.description(description)
.contact(new Contact(contactName,contactURL,contactEmail))
.version("Application Version"+version+",Spring Boot Version"+ SpringBootVersion.getVersion())
.build();
}
/**
* 通用拦截器排除swagger设置,所有拦截器都会自动加swagger相关的资源排除信息
*/
@SuppressWarnings("unchecked")
@Override
public void addInterceptors(InterceptorRegistry registry) {
try {
Field registrationsField = FieldUtils.getField(InterceptorRegistry.class, "registrations", true);
List registrations = (List) ReflectionUtils.getField(registrationsField, registry);
if (registrations != null) {
for (InterceptorRegistration interceptorRegistration : registrations) {
interceptorRegistration
.excludePathPatterns("/swagger**/**")
.excludePathPatterns("/webjars/**")
.excludePathPatterns("/v3/**")