简介
解决问题:org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException和配置Swagger
方法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>
报错在Swagger的配置文件下面,加上@EnableWebMvc注解
在Swagger的配置文件中添加@EnableWebMvc注解是为了明确开启Spring MVC的注解驱动配置,这样可以让Swagger更好地与Spring MVC集成,从而正确地生成API文档。具体分析如下:
-
Swagger集成需求:Swagger需要与Spring MVC紧密集成,以便自动扫描和注册控制器中的RESTful接口。
-
启用MVC注解驱动:通过@EnableWebMvc,能够启用Spring MVC的注解驱动,这对于Swagger解析控制器中的注解非常重要。
-
影响自动配置:使用@EnableWebMvc会覆盖Spring Boot的自动配置,这可能需要人们手动配置一些原来由自动配置提供的设置。
-
配置静态资源处理:由于@EnableWebMvc会影响静态资源的处理,可能需要额外配置以正常提供静态资源。
综上所述,在Swagger的配置文件中使用@EnableWebMvc注解是为了确保Spring MVC的适当配置,以便Swagger可以正确读取和显示RESTful服务的文档信息。需要注意的是,这种配置方式可能会影响Spring Boot应用的某些自动配置行为,因此在使用过程中需要注意相应的配置调整。
方法2
依赖配置:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.7</version>
</dependency>
配置代码:
package com.yupi.usercenter.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
@Bean(value = "defaultApi2")
public Docket defaultApi2() {
return new Docket(DocumentationType.SWAGGER_2)
// .host("localhost:8090")// 不配的话,默认当前项目端口
.apiInfo(apiInfo())
.pathMapping("/")
.select() // 选择哪些路径和api会生成document
// .apis(RequestHandlerSelectors.any())// 对所有api进行监控
.apis(RequestHandlerSelectors.basePackage("com.itdz.controller"))// 选择监控的package
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))// 只监控有ApiOperation注解的接口
//不显示错误的接口地址
.paths(PathSelectors.any())
// .paths(Predicates.not(PathSelectors.regex("/error.*")))//错误路径不监控
// .paths(PathSelectors.regex("/.*"))// 对根下所有路径进行监控
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("标题")
.contact(new Contact("Hanstrovsky", "www.hanstrovsky.com", "Hanstrovsky@gmail.com"))
.description("某某接口文档")
.termsOfServiceUrl("NO terms of service")
// .license("The Apache License, Version 2.0")
// .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
.version("1.0")
.build();
}
}
//访问地址 localhost:配置的端口号/api/doc.html
报错:如果springboot version >= 2.6.x,需要添加如下配置:
spring:
mvc:
path-match:
matching-strategy: ANT_PATH_MATCHER