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

Spring WebFlux使用StepVerifier测试Mono<List>时JSON反序列化错误排查

错误原因
  • 测试中Mock服务返回的响应体是单个JSON对象:{"separator":"value"},JSON结构以{开头属于Object类型
  • 业务代码中声明了要将接口返回值反序列化为List<MyResponse>,Jackson反序列化时检测到当前读取到的是JsonToken.START_OBJECT(对象起始标记),和预期的数组起始标记JsonToken.START_ARRAY不匹配,直接抛出类型不匹配的反序列化异常。
修复方案

根据实际的接口返回结构二选一即可:

方案1:接口确实返回单个MyResponse对象

修改业务方法的返回类型声明,把Mono<List<MyResponse>>改为Mono<MyResponse>,同步调整测试代码:

// 测试代码调整
MyResponse expectedResponse = MyResponse.builder().separator("value").build();
MyRequest request= StubGenerator.getRequest();

mockServer.enqueue(new MockResponse()
        .setBody("{\"separator\":\"value\"}")
        .addHeader("Content-Type", "application/json"));

Mono<MyResponse> responseMono = MyService.getResponse(request, "token");

StepVerifier.create(responseMono)
    .expectNext(expectedResponse)
    .verifyComplete();

方案2:接口实际返回MyResponse数组

仅调整Mock响应的body结构,把单个对象包裹为数组即可,其余代码无需修改:

mockServer.enqueue(new MockResponse()
        // 把原来的单个对象改为数组结构
        .setBody("[{\"separator\":\"value\"}]")
        .addHeader("Content-Type", "application/json"));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:45:08