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

使用Postman测试含HttpServletRequest的Spring接口时遇构造器异常求助

Spring Boot接口HttpServletRequest入参报错解决方案

问题场景

编写如下Spring Boot RestController接口,以HttpServletRequest作为入参,使用Postman调用/test接口时抛出构造方法找不到的异常:

控制器代码

@RestController
public class MyController {

    @PostMapping(path = "/test")
    public ResponseEntity<String> test(HttpServletRequest request) {
        final String host = request.getRemoteAddr();
        final String key = request.getParameter("key");
        final String application = request.getParameter("nomeApp");
        // 业务逻辑...
        return ResponseEntity.ok("success");
    }
}

异常信息

java.lang.IllegalStateException: No primary or single unique constructor found for interface javax.servlet.http.HttpServletRequest
at org.springframework.beans.BeanUtils.getResolvableConstructor(BeanUtils.java:266) ~[spring-beans-6.0.4.jar:6.0.4]
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:219) ~[spring-web-6.0.4.jar:6.0.4]

原因分析

  1. 项目使用Spring Boot 3.x(对应spring-web 6.0.4),该版本已切换到Jakarta EE API,不再兼容旧的javax.servlet包
  2. 手动引入的javax.servlet:servlet-api:2.5依赖与Spring Boot 3.x的Servlet API规范冲突,导致Spring无法识别HttpServletRequest为Servlet原生对象,错误地将其当作普通模型属性尝试实例化,从而抛出构造方法找不到的异常
  3. spring-boot-starter-web已内置适配当前Spring Boot版本的Servlet API依赖,无需手动引入旧版本

解决方案

步骤1:移除冲突的Servlet API依赖

删除pom.xml中以下依赖:

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

步骤2:调整后的完整依赖示例

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
        <!-- Excluded commons-io because of CVE-2021-29425 -->
        <exclusions>
            <exclusion>
                <artifactId>commons-io</artifactId>
                <groupId>commons-io</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>
</dependencies>

步骤3:验证接口调用

修改依赖后重新启动项目,使用Postman调用/test接口,Spring会自动注入HttpServletRequest对象,接口可正常获取请求参数和远程地址等信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:46:13