You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加Swagger配置文件后Spring Boot测试失败,报错缺失HttpServletRequest

问题:添加Swagger配置后Spring Boot测试全部失败

在Spring Boot应用中添加Swagger配置文件后,所有测试均失败,此前测试运行正常。

Swagger配置文件

@Configuration
@EnableOpenApi
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("My Awesome API")
                .description("Description for my awesome API")
                .version("1.0")
                .termsOfServiceUrl("https://www.example.com/terms-of-service")
                .license("License: MIT")
                .licenseUrl("https://opensource.org/licenses/MIT")
                .build();
    }
}

项目POM依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.maxmind.geoip2</groupId>
        <artifactId>geoip2</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
    </dependency>
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-test</artifactId>
        <version>3.4.8</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
</dependencies>

核心报错信息

java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest

已尝试的无效解决方案

添加以下依赖后问题未解决:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
</dependency>

问题原因及解决方法

原因分析

项目同时引入了spring-boot-starter-web(Servlet栈)和spring-boot-starter-webflux(响应式Reactor栈),Spring Boot在混合场景下会自动切换为Reactor Web环境,不会加载Servlet相关依赖。而Springfox 3.0.0的Swagger依赖基于Servlet环境开发,因此出现找不到javax.servlet.http.HttpServletRequest类的错误。

另外,手动添加的javax.servlet:servlet-api:2.5是低版本Servlet API,Spring Boot已通过starter管理依赖版本,该依赖不仅无法解决问题,还可能引发版本冲突,建议删除。

解决方案

方案1:若项目为响应式WebFlux应用

替换Springfox为支持WebFlux的SpringDoc OpenAPI,删除原有的springfox-boot-starter依赖,添加以下依赖:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
    <version>2.2.0</version>
</dependency>

同时删除手动编写的SwaggerConfig类,SpringDoc会自动完成Swagger配置。

方案2:若项目为传统Servlet Web应用

直接移除spring-boot-starter-webflux依赖,Spring Boot会默认使用Servlet环境,此时原有的Swagger配置和springfox-boot-starter依赖可正常工作,无需额外添加Servlet API依赖(spring-boot-starter-web已包含对应依赖)。

内容的提问来源于stack exchange,提问作者asd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:12:10