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
相关产品推荐
相关产品推荐

