问题描述
如何使用Rest Assured获得位于父节点EntityPropertyValue
下的子节点ProductPropertyValueUId
,ProductPropertyValueDisplayName
,["Name": "PriorityUId"]
?
下面是代码段
RequestSpecification request = RestAssured.given();
request.header("Content-Type","application/json");
JSONObject requestParams = new JSONObject();
requestParams.put("data","somedata");
request.body(requestParams.toJSONString());
Response response = request.post("url");
List<Map<String,String>> epv = response.jsonPath().getList("EntityPropertyValues");
for(int i=0;i<epv.size();i++)
{
if(epv.get(i).containsValue("PriorityUId"))
{
System.out.println(epv.get(i));
break;
}
}
我正在执行sysout,并且得到以下整个数据块作为响应。
{
"Name": "PriorityUId","Values": [
{
"EntityPropertyValue": "Critical","ProductPropertyValueUId": "00000019-0000-0000-0000-000000000033","ProductPropertyValueDisplayName": "Blocker"
},{
"EntityPropertyValue": "Critical","ProductPropertyValueUId": "00000019-0000-0000-0000-000000000034","ProductPropertyValueDisplayName": "Critical"
},{
"EntityPropertyValue": "High","ProductPropertyValueUId": "00000019-0000-0000-0000-000000000035","ProductPropertyValueDisplayName": "Major"
}
],"DataTypeUId": "00100002-0007-0000-0000-000000000000","DisplayName": "Priority"
}
如何捕获要查找的字段?
下面是整个JSON响应
{
"ProductInstance": "00000000-0000-0000-0000-000000000000","DataTypeUId": null,"EntityPropertyValues": [
{
"Name": "ModifiedAtSourceByUser","Values": [],"IsPropertyExists": true
},{
"Name": "ModifiedAtSourceOn","Values": []
},{
"Name": "PriorityUId","DisplayName": "Priority"
}
]
}
解决方法
获取响应正文的JsonPath视图
JsonPath js = response.jsonPath();
获取EntityPropertyValues的大小
int size = js.getInt("EntityPropertyValues.size()");
遍历数组,直到找到所需的值为止-当前PriorityUId
如果匹配,请使用JsonPath来获取值,
for (int i = 0; i < size; i++) {
String detail = js.getString("EntityPropertyValues[" + i + "].Name");
if (detail.equalsIgnoreCase("PriorityUId")) {
List<Object> EntityPropertyValue = js
.getList("EntityPropertyValues[" + i + "].Values.EntityPropertyValue");
List<Object> ProductPropertyValueUId = js
.getList("EntityPropertyValues[" + i + "].Values.ProductPropertyValueUId");
List<Object> ProductPropertyValueDisplayName = js
.getList("EntityPropertyValues[" + i + "].Values.ProductPropertyValueDisplayName");
System.out.println("Values for EntityPropertyValue : " + EntityPropertyValue);
System.out.println("Values for ProductPropertyValueUId : " + ProductPropertyValueUId);
System.out.println("Values for ProductPropertyValueDisplayName : " + ProductPropertyValueDisplayName);
break;
}
}