Будьте уверены: как мы можем сравнить каждый элемент в массиве Json с одним и тем же значением в Java, используя Hemcrest Matchers, а не используя цикл Foreach.
{
"id": 52352,
"name": "Great Apartments",
"floorplans": [
{
"id": 5342622,
"name": "THE STUDIO",
"fpCustomAmenities": [
{
"displaySequence": 2,
"amenityPartnerId": "gadasd",
"display": true,
"leased": true
},
{
"displaySequence": 13,
"amenityPartnerId": "sdfsfd",
"display": true,
"leased": true
}
]
},
{
"id": 4321020,
"name": "THE First Bed",
"fpCustomAmenities": [
{
"displaySequence": 4,
"amenityPartnerId": "gadasd",
"display": true,
"leased": true
},
{
"displaySequence": 15,
"amenityPartnerId": "hsfdsdf",
"display": true,
"leased": true
}
]
}
]
}
Я хочу сравнить, что Leased = true для всех арендованных узлов на всех уровнях в ответе json ...
У меня рабочий код ...
List<List<Boolean>> displayedvaluesfpStandardAmenities =
when().get(baseUrl + restUrl).
then().statusCode(200).log().ifError().
extract().body().jsonPath().getList("floorplans.fpCustomAmenities.display");
for (List<Boolean> displayedStandardList : displayedvaluesfpStandardAmenities) {
for (Boolean isDisplayedTrue : displayedStandardList) {
softAssert.assertTrue(isDisplayedTrue);
}
}
Но проблема в том, что мне нужно, чтобы код был в простом формате с использованием либо Hemcrest Matchers, либо Restaussred Matchers, и попробуйте упрощенный способ, например, ниже (который не работает)
when().get(baseUrl + restUrl).
then().assertThat().body("floorplans.fpCustomAmenities.display",equalTo("true"));
Я получаю сообщение об ошибке
java.lang.AssertionError: 1 expectation failed.
JSON path floorplans.fpCustomAmenities.display doesn't match.
Expected: true
Actual: <[[true, true], [true, true]]>
Итак, мне нужно, чтобы все узлы 'display' в ответе json, где бы это ни было необходимо, сравнивали с истинным, чтобы мой тест мог пройти.
У меня есть альтернативное решение, подобное упомянутому выше, но все, что мне нужно, - это рабочее решение с использованием сопоставителей.