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

如何在REST客户端GET请求中获取对象特定属性及后端接口排查

解决你的接口测试与数据获取问题

让我们一步步拆解并解决你遇到的问题:

一、先搞定接口返回null的核心问题

从你贴出的代码来看,返回finalList全为null大概率是因为数组元素未实例化加上循环逻辑错误,具体问题点:

  1. finalList未正确初始化:你直接调用finalList[i].setVokabelENG(),但如果finalList只是声明了数组长度(比如Vokabel[] finalList = new Vokabel[15];),每个元素默认是null,直接调用set方法会抛出空指针,最终返回的数组自然全是null。解决方法是在赋值前先实例化Vokabel对象:
    // 比如在循环内先创建实例
    finalList[i] = new Vokabel();
    finalList[i].setVokabelENG(sehrWahrscheinlich[i].getVokabelENG());
    finalList[i].setVokabelDE(sehrWahrscheinlich[i].getVokabelDE());
    
  2. 循环复制粘贴错误:你在处理wahrscheinlich和nichtWahrscheinlich的循环里,依然用了sehrWahrscheinlich[i]的属性赋值,这明显是笔误,应该改成对应的数组:
    // 处理wahrscheinlich的循环
    if (finalList.length < 13) {
        finalList[i] = new Vokabel();
        finalList[i].setVokabelENG(wahrscheinlich[i].getVokabelENG());
        finalList[i].setVokabelDE(wahrscheinlich[i].getVokabelDE());
    }
    // 处理nichtWahrscheinlich同理
    
  3. while循环逻辑死循环风险:Java数组长度是固定的,如果finalList初始化长度小于15,while (finalList.length < 15)会永远成立,因为数组长度无法动态扩展。建议改用List<Vokabel>来动态添加元素,最后再转成数组返回:
    List<Vokabel> finalList = new ArrayList<>();
    // 用add方法添加元素,比如:
    for (Vokabel v : sehrWahrscheinlich) {
        if (finalList.size() < 10) {
            finalList.add(v); // 或者new Vokabel后复制属性
        }
    }
    // 后续循环同理,最后转数组
    return finalList.toArray(new Vokabel[0]);
    

二、遍历获取每个VokabelDE

当接口修复后返回正常的JSON数组,在Advanced REST Client(ARC)里可以这样获取所有VokabelDE:

  • 直接查看响应:发送GET请求后,在ARC的「Response」标签里切换到「JSON」视图,就能看到每个元素的vokabelDE字段。
  • 用脚本提取:如果需要批量提取,切换到「Script」标签,编写简单的JS脚本:
    // 解析响应JSON
    const responseData = JSON.parse(responseText);
    // 提取所有vokabelDE
    const allVokabelDE = responseData.map(item => item.vokabelDE);
    // 打印结果到控制台
    console.log("所有VokabelDE:", allVokabelDE);
    
    运行脚本后就能在ARC的控制台看到所有VokabelDE的列表。

三、在GET请求中获取对象的特定属性

有两种常见方式实现:

方式1:修改后端接口支持字段筛选

在接口中添加请求参数,根据参数返回指定属性:

@GetMapping("/vokabelListe")
@ResponseStatus(HttpStatus.OK)
public Object getVokabelListe(@RequestParam(required = false) String include) {
    // 先正确构建finalList(用List转数组的方式)
    List<Vokabel> finalList = new ArrayList<>();
    // ... 填充finalList的逻辑 ...

    if ("vokabelDE".equals(include)) {
        // 只返回vokabelDE属性
        return finalList.stream()
                        .map(v -> Map.of("vokabelDE", v.getVokabelDE()))
                        .toArray();
    }
    // 默认返回完整对象
    return finalList.toArray(new Vokabel[0]);
}

然后在ARC中发送请求:GET http://your-domain/vokabelListe?include=vokabelDE,就能只得到包含vokabelDE的数组。

方式2:在ARC中用响应脚本过滤

如果不想修改后端,直接在ARC的响应脚本里提取特定属性,就是上面提到的脚本方式,只保留你需要的字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:27:43