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

使用GoDaddy API批量获取域名时打印结果为Null的问题排查

嘿,我一眼就发现问题出在哪了——你的JsonPath路径和GoDaddy API返回的JSON结构完全不匹配!

核心问题分析

看你提供的JSON响应片段,它是一个直接的顶级数组(格式是[ {...}, {...} ]),没有外层的array字段。但你的代码里不管是断言还是循环取值,都用了array[0].domain、array.size()这种路径——这就是为什么打印出来全是null,因为响应里根本不存在array这个属性!

至于你说断言能通过,我猜你是在替换敏感信息的时候把实际的断言路径写错了?比如你实际写的是body("[0].domain", equalTo("xxx")),但发帖时误写成了array[0].domain,不然断言应该会直接失败才对。

修复方案

把所有涉及array的JsonPath路径都去掉,直接针对顶级数组操作:

1. 修改数组长度获取逻辑

原来的代码:

int count = js.get("array.size()");

改成:

int count = js.get("size()");

2. 修改循环取值逻辑

原来的代码:

String name = js.get("array["+i+"].domain");

改成(用getString()更直接,避免类型转换问题):

String name = js.getString("[" + i + "].domain");

3. 更简洁的写法(可选)

你可以直接用getList()一次性获取所有域名,不用手动循环索引:

List<String> allDomains = js.getList("domain");
for(String domain : allDomains) {
    System.out.println(domain);
}
System.out.println(allDomains.size());

修复后的完整Test方法示例

public void Test(){
    RestAssured.baseURI = prop.getProperty("GODADDYHOST");
    Response res = given()
            .header("Authorization", prop.getProperty("GODADDYKEY"))
            .log().all()
            .header("Content-Type", "application/json")
            .header("Accept", "application/json")
            .param("includes", "contacts")
            .when()
            .get(Resources.godaddyGetData())
            .then()
            .assertThat().statusCode(200)
            .and().contentType(ContentType.JSON)
            .and().body("[0].domain",equalTo("SENSITIVE INFORMATION")) // 这里也要去掉array前缀!
            .and().body("[0].domainId",equalTo("SENSITIVE INFORMATION")) // 同样修改路径
            .and().header("Server", "SENSITIVE INFORMATION")
            .log().body()
            .extract().response();

    JsonPath js = ReusableMethods.rawToJson(res);
    // 方式1:索引循环
    int count = js.get("size()");
    for (int i = 0; i < count; i++){
        String name = js.getString("["+i+"].domain");
        System.out.println(name);
    }
    System.out.println(count);

    // 方式2:直接获取列表(更简洁)
    // List<String> domains = js.getList("domain");
    // domains.forEach(System.out::println);
    // System.out.println(domains.size());
}

为什么Google Maps API能正常工作?

因为Google Maps的API响应结构是外层有一个包含数组的对象(比如可能有results或者array字段),所以你当时用的路径是匹配的,但GoDaddy的这个API返回的是纯数组,路径自然不一样啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:58:10