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

SpringBoot中RestTemplate调用后getBody()无返回值问题排查

问题原因&解决方案

核心问题定位

你遇到的执行中断是多个语法、匹配错误共同导致的,按优先级排序如下:

1. URL匹配失败导致Mockito返回空指针

你在HttpDataClient中使用String.format("/data/{0}", dataId)拼接路径,String.format的占位符是%前缀语法,{0}是MessageFormat的语法,这行代码实际生成的请求路径是/data/{0},和你测试Stub的/data/dataIdTest完全不匹配。
Mockito匹配不到对应Stub时会默认返回null,你调用null.getBody()触发空指针,但你的catch逻辑只捕获HttpStatusCodeException,空指针未被捕获直接导致程序中断。

2. 测试对象初始化错误

你需要测试的是HttpDataClient类,但测试类中错误初始化了HttpDataService对象,方法调用完全没有落到你要测试的业务逻辑上。

3. DataResponse类存在语法&逻辑错误

  • 调用处使用DataResponse.dataResponse()构造返回值,但类中实际定义的静态方法是gameDataResponse,方法名、返回类型都不匹配,编译阶段就存在问题。
  • failed()方法存在递归死循环:方法内部直接调用failed()自身,只要触发就会无限递归直到栈溢出,程序直接中断。

4. 缺失asString工具方法

HttpDataClient的dataResponse方法中调用了asString()方法,但你没有给出该方法的实现,运行时会报方法不存在错误。

修复步骤

  • 修正URL拼接逻辑,二选一即可:
    // 方案1:改用MessageFormat
    MessageFormat.format("/data/{0}", dataId)
    // 方案2:改用String.format标准占位符
    String.format("/data/%s", dataId)
    
  • 修正测试类的测试对象:
    // 替换原有HttpDataService初始化
    private final HttpDataClient httpDataClient = new HttpDataClient(restTemplate);
    // 调用处替换为
    DataResponse response = httpDataClient.getData("dataIdTest");
    
  • 修复DataResponse类的方法错误:
    // 修正静态构造方法名和返回类型
    public static DataResponse dataResponse(String dataId, String author, String authorDataId, String serverSideDataId){
        return new DataResponse(dataId, author, authorDataId, serverSideDataId);
    }
    // 修复failed方法死循环
    public static DataResponse failed() {
        return new DataResponse("failed", "failed", "failed", "failed");
    }
    
  • 补充HttpDataClient中的asString方法:
    private String asString(JsonNode node, String fieldName) {
        JsonNode field = node.get(fieldName);
        return field != null ? field.asText() : null;
    }
    
  • 可选优化:测试中增加结果断言,验证返回值符合预期,同时开启Mockito严格 stubbing 模式,匹配失败时直接抛出明确错误,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:51:02