4

我正在使用 rest-assured 编写冒烟测试,并希望遍历 api 以确保不会发生意外错误。

我有一个看起来像这样的数据结构:

{
...
"sites": [
    {
        ...
        "groups": [
            {
                ...
                "locations": [
                    {
                        ...
                        "racks": [
                            {
                                "rackId": 123456789,
                                ...
                            },
                            {
                                "rackId": 987654321,
                                ...
                            },
                            ...
                        ]
                    }
                ]
            }
        ]
    },
    {
        ...
        "groups": [
            {
                ...
                "locations": [
                    {
                        ...
                        "racks": [
                            {
                                "rackId": 11111111,
                                ...
                            },
                            {
                                "rackId": 22222222,
                                ...
                            },
                            ...
                        ]
                    }
                ]
            }
        ]
    },
    ...
]
}

使用捆绑在 RestAssured 中的 JsonPath,我试图获取所有 rackIds 的平面列表,然后调用这些 rackIds 的后续请求。

jsonPath.getList("sites.groups.locations.racks.rackId", Long.class);

>> java.lang.NumberFormatException: For input string: "[[[406071537, 406071538, 406071539, 406071540, 406071541]]]"

我尝试使用这条路径,但没有奏效,因为我相信这种语法只适用于其他 JsonPath 实现,而不是与 rest-assured 捆绑的那个

"$.sites[*].groups[*].locations[*].racks[*].rackId"

我现在归结为这个,它给了我列表列表的列表,然后我可以把自己弄平。但是我有一个问题,默认情况下这些数字被解释为整数,但我收到的是 Long 值。

 List list = jsonPath.getList("sites.groups.locations.racks.rackId");

有任何想法吗?

4

1 回答 1

9

只需使用flatten()

List list = jsonPath.getList("sites.groups.locations.racks.rackId.flatten()");
于 2016-04-14T19:59:32.593 回答