pom文件引入swagger3依赖
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-boot-starterartifactId>
<version>3.0.0version>
dependency>
swagger使用ant_pattern_parser解析路径,但是spring boot在2.6之后(好现实2.6),修改为了path_pattern_parser。所以为了能使swagger正常使用,需要配置如下
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
否则会报错
Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
为了代码优雅,把swagger3启动注解写在了配置类
@EnableOpenApi 注解一定要写,可以写在启动类 也可有写在配置类
@EnableOpenApi
@Configuration
public class SwaggerConfig {
/**
* 用于读取配置文件中 swagger 属性是否开启
*/
@Value("${swagger.enabled}")
Boolean swaggerEnabled;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.enable(swaggerEnabled)
.select()
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("FH Admin Swagger3 RESTful API") // 页面标题
.version("3.0") // 版本号
.description("fhadmin.org") // 描述
.build();
}
}
Swagger UI的路径(网上一般是这个):http://localhost:8080/swagger-ui/index.html
疑点1:swagger地址压根没有写对!!!
不要直接根据网上给的http://localhost:8080/swagger-ui/index.html直接访问
解决方案:
正确链接拼接为:
http://localhost:端口号/api/swagger-ui/index.html
api是系统配置文件的默认前缀path,如没则忽略
比如配置是
server:
servlet:
context-path: /admin-api
port: 8000
那么swagger的访问地址是:
http://localhost:8000/admin-api/swagger-ui/index.html
疑点2 检查您的API是否允许跨域资源共享(CORS)。如果不允许,则Swagger UI无法从API获取资源。
疑点3 在您的服务器上检查您的防火墙设置,以确保您的API端口没有被阻塞。
疑点4 swagger地址被拦截,添加swagger拦截配置
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
.resourceChain(false);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/swagger-ui/")
.setViewName("forward:/swagger-ui/index.html");
}
}