springboot使用swagger2以及遇到的一些问题

发布时间 2023-06-12 16:10:45作者: 妞妞猪

1.导入依赖

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>

2.配置配置文件(我这里配置了两个文件,主要是因为不配置第二个文件WebMvcConfig会导致No mapping for GET /swagger-ui.html这个错误,另外我把swagger的权限设置token也放进去了

第一个文件(SwaggerConfig):

@Configuration //声明这是一个注解类
@EnableSwagger2
public class SwaggerConfig {

@Bean
public Docket customDocket(){

//添加请求参数,这里把token作为请求头参数传入后端
ParameterBuilder parameterBuilder = new ParameterBuilder();
List<Parameter> parameterList = new ArrayList<Parameter>();
parameterBuilder.name("token")
.description("token令牌")
.modelRef(new ModelRef("String"))
.parameterType("header")
.required(false)
.build();
parameterList.add(parameterBuilder.build());

return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors
.basePackage("com.gykg.yizhichun.controller"))
.paths(PathSelectors.any())
.build()
.useDefaultResponseMessages(false)
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
//.globalOperationParameters(parameterList);//全局添加token令牌的输入
}

private List<ApiKey> securitySchemes() {
List<ApiKey> apiKeyList = new ArrayList();
apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));//我的token获取是通过authorization获取的
return apiKeyList;
}

private List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(
SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("^(?!auth).*$"))
.build());
return securityContexts;
}

List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}


private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("API接口文档")
.description("swagger接口文档描述")
.version("1.1.0")
.build();
}
}

第二个文件(WebMvcConfig):

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {

@Bean
public CharacterEncodingFilter characterEncodingFilter(){
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
return filter;
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
// 解决静态资源无法访问(可选)
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/");
// 直接在浏览器访问:根目录/swagger-ui.html
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
// 需要用到的webjars(包含js、css等)
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}

3.controller文件,这里的tags是代表了一个接口的组,然后getmapping在swagger页面中会显示get,postmapping在swagger页面中会显示post,requestmapping在swagger页面中会显示所有,还有一些其他的类型

@ApiOperation(value = "欢迎接口",
notes = "欢迎接口",
tags = {"资信校验接口"})
@GetMapping("/hello")
public String say(){
return "hello world!";
}

4.主启动文件(查了很多资料都基本上没提到过这个,萌新我就遇到了这个问题,没有配置扫描,所以也会报No mapping for GET /swagger-ui.html这个错误)

我的解决方法是在主启动项中加入这个

@SpringBootApplication(scanBasePackages = {"com.gykg.yizhichun.config"})

最后附上运行起来的图片

 

 

不过有个问题,hello接口在网页上的显示内容中文乱码,不清楚是什么原因造成的