我有一个包含以下内容的身体放心的回复:
{
"content":[
{
"id":"7db80896",
"secondaryId":"12F9BD",
"version":1,
"details":{
"status":"VALID",
"reason":"Passed validations"
},
"subscriptionStatuses":[
{
"subscriptionId":"b8003508",
"subscriptionName":"Sub_1",
"creator":"Person 1",
"details":{
"status":"ACCEPTED",
"reason":"Passed validations"
}
},
{
"subscriptionId":"b8003509",
"subscriptionName":"Sub_2",
"creator":"Person 1",
"details":{
"status":"ACCEPTED",
"reason":"Passed validations"
}
}
]
},
{
"id":"7db80895",
"secondaryId":"11F9BD",
"version":1,
"details":{
"status":"VALID",
"reason":"Passed validations"
},
"subscriptionStatuses":[
{
"subscriptionId":"b8003509",
"subscriptionName":"Sub_2",
"creator":"Person 2",
"details":{
"status":"ACCEPTED",
"reason":"Passed validations"
}
}
]
}
]
}
我想验证状态“ ACCEPTED”,并说明嵌套在2个数组中的原因“ PASSED VALIDATIONS”。我尝试将原因存储为列表,在此example中列出,但出现以下错误:
代码:var list: List<Any> = response.jsonPath().getList("reason")
错误:java.lang.IllegalStateException: response.jsonPath().getList("reason") must not be null
有办法吗?
for obj in response:
for obj2 in obj.subscriptionStatuses:
assertThat(obj2.status == expected)
assertThat(obj2.reason == expected)
[有一种方法:将响应反序列化为对象。创建与响应匹配的类。
例如
class Status {
private String id;
private String secondaryId;
//etc.
private StatusDetail details;
private List<SubscriptionStatus> subscriptionStatuses;
}
...等等。我不知道这在Kotlin中会是什么样,但是会很相似。
请注意,JSON响应中的嵌套对象是它们自己的类,每个类中的字段名称应与JSON中的字段名称匹配。
然后,您可以使用ObjectMapper
反序列化。您可能需要首先执行response.jsonPath().getList("$.content")
,但我不知道您的响应对象是什么,以提供更多指导。最好是直接获取JSON字符串:
List<Status> statuses = new ObjectMapper().readValue(jsonString,
new TypeReference<List<Status>>() {})
请注意,您可以重复使用ObjectMapper
,并且不应每次都创建一个新的C0,并且ObjectMapper
和allow null values都有一些选项。
您可以使用以下代码获取它
List<String> m1 =response.jsonPath().get("content.subscriptionStatuses.details");
System.out.println(m1);
输出将显示[[{{状态=已接受,原因=已通过验证},{状态=已接受,原因=已通过验证}],[{状态=已接受,原因=已通过验证}]]