Spring Boot使用@EnableSwagger2注解启动失败求助
Spring Boot 3 集成Swagger2启动失败问题
我是Spring框架初学者,使用@EnableSwagger2注解时应用启动失败。
我的Config类代码
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 @Configuration @RequiredArgsConstructor public class Config { private final ObjectMapper objectMapper; void customizeObjectMapper() { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } }
报错信息
ApplicationContext启动失败。如需查看条件评估报告,请启用'debug'模式重新运行应用。 2023-09-28T21:12:11.549+02:00 ERROR 25124 --- [main] o.s.boot.SpringApplication : 应用启动失败 org.springframework.context.ApplicationContextException: 无法启动bean 'documentationPluginsBootstrapper' at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) ~[spring-context-6.0.12.jar:6.0.12] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:357) ~[spring-context-6.0.12.jar:6.0.12] at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:156) ~[spring-context-6.0.12.jar:6.0.12] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:124) ~[spring-context-6.0.12.jar:6.0.12] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:958) ~[spring-context-6.0.12.jar:6.0.12] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:611) ~[spring-context-6.0.12.jar:6.0.12] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.1.4.jar:3.1.4] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) ~[spring-boot-3.1.4.jar:3.1.4] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.1.4.jar:3.1.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-3.1.4.jar:3.1.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-3.1.4.jar:3.1.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-3.1.4.jar:3.1.4] at com.example.spring_learn_with_yt_1.SpringLearnWithYt1Application.main(SpringLearnWithYt1Application.java:10) ~[classes/:na] Caused by: java.lang.NullPointerException: 无法调用"org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()",因为"this.condition"为null at springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56) ~[springfox-spring-webmvc-3.0.0.jar:3.0.0] at springfox.documentation.RequestHandler.sortedPaths(RequestHandler.java:113) ~[springfox-core-3.0.0.jar:3.0.0] at springfox.documentation.spi.service.contexts.Orderings.lambda$byPatternsCondition$3(Orderings.java:89) ~[springfox-spi-3.0.0.jar:3.0.0]
问题原因及解决办法
原因
你使用的Spring Boot 3.1.4与Swagger2(springfox 3.0.0)不兼容。Spring Boot 3基于Spring 6,而springfox 3.0.0最高仅支持Spring Boot 2.7.x,两者的Web MVC组件接口、Servlet API存在差异,直接集成会触发空指针异常。
解决步骤
替换Swagger依赖:弃用springfox,改用支持Spring Boot 3的
springdoc-openapi-starter-webmvc-ui,这是当前官方推荐的API文档方案。- Maven依赖替换为:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> </dependency> - Gradle依赖替换为:
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
- Maven依赖替换为:
移除
@EnableSwagger2注解:springdoc无需该注解,直接删除Config类上的@EnableSwagger2。修复ObjectMapper配置:原
customizeObjectMapper方法未被Spring调用,需添加@PostConstruct注解确保初始化时执行:import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; @Configuration @RequiredArgsConstructor public class Config { private final ObjectMapper objectMapper; @PostConstruct void customizeObjectMapper() { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } }验证启动:应用启动后,访问
http://localhost:8080/swagger-ui.html即可查看API文档页面。
内容的提问来源于stack exchange,提问作者Clipper
相关产品推荐
相关产品推荐

