SpringBoot如何整合Swagger框架并设置请求头token默认值呢?
swagger框架可为设置了相应注解的类及方法自动生成相应的测试页面,我们只需输入相应的信息,即可是实现接口的测试,那么我们大部分接口都加入了token验证,我们该如何引入swagger及设置默认token呢?
下文笔者将一一道来,如下所示
1.引入相应的swagger依赖
2.编写相应的swaggerConfig,添加默认token
3.在相应的controller上加入注解
采用以上方法
即可为swagger设置默认token
例:SpringBoot为swagger设置默认token的方法及示例分享
引入maven依赖
<!-- swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!--防止进入swagger页面报类型转换错误,排除2.9.2中的引用,手动增加1.5.21版本-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.21</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
创建配置类
SwaggerConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.Arraylist;
/**
* @author java265.com
*/
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
/**
* 配置Swagger的Docket的bean实例
* @return
*/
@Bean
public Docket docket(Environment environment) {
//设置只在开发中环境中启动swagger
Profiles profiles=Profiles.of("dev");
//表示如果现在是dev环境,则返回true 开启swagger
boolean flag=environment.acceptsProfiles(profiles);
/*添加接口请求头参数配置 没有的话 可以忽略*/
ParameterBuilder tokenPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<>();
tokenPar.name("token").description("令牌").defaultValue("设置token默认值").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
pars.add(tokenPar.build());
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//是否启动swagger 默认启动
.enable(flag)
//所在分组
.groupName("java265")
.select()
//指定扫描的包路径
.apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
//指定扫描的请求,这里表示扫描 /hello/ 的请求
//.paths(PathSelectors.ant("/hello/**"))
.build()
.globalOperationParameters(pars);
}
/**
* 配置ApiInfo信息
* @return
*/
private ApiInfo apiInfo() {
//作者信息
Contact author = new Contact("java265", "https://www.java265.com/", "admin@java265.com");
return new ApiInfo(
"Swagger测试",
"Swagger描述",
"1.0",
"urn:tos",
author,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
但是如果有其他配置继承了 WebMvcConfigurationSupport 就需要增加资源映射 不然会失效
(尽量不要使用继承的方式,可以改为实现 implements WebMvcConfigurer)
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {
/**
* 发现如果继承了WebMvcConfigurationSupport, 需要重新指定静态资源
*
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}
}
如果配置了拦截器 也需要去掉相应拦截
List<String> urls = new LinkedList<>();
urls.add("/favicon.ico");
urls.add("/error");
urls.add("/swagger-resources/**");
urls.add("/webjars/**");
urls.add("/v2/**");
urls.add("/doc.html");
urls.add("**/swagger-ui.html");
urls.add("/swagger-ui.html/**");
registry.addInterceptor(authenticationInterceptor())
.excludePathPatterns(urls)
这是因为springboot版本是2.6以上版本,降低springboot版本为 2.1.10.RELEASE
或
加上配置
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


