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

Spring集成测试无法获取指定Class类型的 ResponseEntity 问题排查

无法将JSON响应映射到AuthResponse对象的原因及解决方法

你在Spring集成测试中使用TestRestTemplate请求接口时,能正常获取String类型的响应,但无法映射到AuthResponse对象,抛出RestClientException反序列化错误。

核心原因

Jackson(Spring默认的JSON序列化/反序列化库)无法实例化AuthResponse对象,根源在于:

  • AuthResponse没有无参构造函数:Jackson默认需要通过无参构造创建对象实例,再通过反射或setter填充字段。
  • 带参构造函数未被Jackson识别:没有配置注解让Jackson知晓如何使用带参构造函数完成反序列化。

解决方法

方法1:添加无参构造函数

修改AuthResponse类,补充无参构造函数:

public class AuthResponse {
    private String token = "some token";

    // 添加无参构造函数
    public AuthResponse() {
    }

    public AuthResponse(String token) {
        this.token = token;
    }

    public String getToken() {
        return token;
    }
}

方法2:为带参构造函数添加@JsonProperty注解

若不想添加无参构造,可给带参构造的参数添加@JsonProperty注解,指定Jackson使用该构造函数反序列化:

import com.fasterxml.jackson.annotation.JsonProperty;

public class AuthResponse {
    private String token = "some token";

    public AuthResponse(@JsonProperty("token") String token) {
        this.token = token;
    }

    public String getToken() {
        return token;
    }
}

方法3:使用Lombok简化代码(可选)

如果项目已引入Lombok,可通过@Data注解自动生成无参构造、getter等方法,减少手动编写的代码:

import lombok.Data;

@Data
public class AuthResponse {
    private String token = "some token";

    public AuthResponse(String token) {
        this.token = token;
    }
}

验证修改

完成上述任意一种修改后,重新运行集成测试,TestRestTemplate即可正常将JSON响应映射到AuthResponse对象,你可以通过response.getBody().getToken()获取并验证生成的token内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:08:16