Spring WebTestClient无法解析参数化类型List<DomainOperation<Account>>的请求体
问题本质
该异常是嵌套参数化类型的泛型信息在反序列化阶段丢失导致的,Jackson无法识别DomainOperation的实际泛型参数,只能反序列化为泛型上限(默认是Object),最终所有字段映射失败赋值为null。
解决方案
- 第一,检查
ParameterizedTypeReference的构造方式,必须使用匿名内部类写法保留完整泛型信息,尾部的大括号不可省略,示例正确写法:
// 注意尾部的{}是匿名内部类标识,用于在运行时保留泛型信息 ParameterizedTypeReference<List<DomainOperation<Account>>> typeRef = new ParameterizedTypeReference<List<DomainOperation<Account>>>() {};
调用WebTestClient时正确传入类型引用:
webTestClient.post().uri("/你的接口路径") .contentType(MediaType.APPLICATION_JSON) .bodyValue(构造的测试列表, typeRef) .exchange() .expectStatus().isOk();
- 第二,如果上述写法仍未解决,可直接序列化测试对象为JSON字符串后发起请求,绕开WebTestClient侧的类型转换逻辑,直接交给控制器的消息转换器处理:
// 注入或初始化ObjectMapper @Autowired private ObjectMapper objectMapper; // 测试用例中先序列化 List<DomainOperation<Account>> testList = 构造你的测试数据; String requestJson = objectMapper.writeValueAsString(testList); // 直接传递JSON字符串请求 webTestClient.post().uri("/你的接口路径") .contentType(MediaType.APPLICATION_JSON) .bodyValue(requestJson) .exchange() .expectStatus().isOk();
- 第三,检查POJO类规范:确保
DomainOperation、Account类都包含无参公共构造方法,所有需要反序列化的字段都有对应的getter/setter,或标注了@JsonProperty注解,没有被@JsonIgnore等注解排除。
内容的提问来源于stack exchange,提问作者lfreire
相关产品推荐
相关产品推荐

