Выполнение какого-либо запроса к внутреннему API для получения некоторого массива с объектами JSON, которые мне нужно использовать в тестовом прогоне. Использование RestAssured + Junit5 + Gradle + Allure.
Response response =
given()
.header("Content-Type", "application/json")
.body(jsonPayload)
.when()
.post(STAGINGSCHEDULE+signature)
.then()
.assertThat()
.statusCode(200)
.body("message", is("Payload valid"),
"payment_schedule", hasSize(greaterThan(0)))
.extract().response();
Я бы получил это:
ArrayList<JsonElement> jsonElement = response.path("payment_schedule.payment_dates");
Эта команда покажет мне массив, заполненный необходимыми мне объектами json. Но cound не преобразовал это в gson.JsonObject.
System.out.println("jsonElement.get(1): "+jsonElement.get(1));
Какие методы я использовал обычно, когда сам генерировал данные. Объект - gsonObject, а массив - gsonArray.
callbackJournalObject.add("schedule", scheduleArray);
Когда я пытаюсь использовать
callbackJournalObject.add("schedule", jsonElement.get(1));
я получил
java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.google.gson.JsonElement
Пример тела ответа JSON:
{
"status": 0,
"message": "Payload valid",
"payment_schedule": [
{
"total": 16800.0,
"term": 3,
"payment_dates": [
{
"date": "16.10.2018",
"amount": 5600.0
},
{
"date": "16.11.2018",
"amount": 5600.0
},
{
"date": "17.12.2018",
"amount": 5600.0
}
]
},
{
"total": 16650.0,
"term": 6,
"payment_dates": [
{
"date": "16.10.2018",
"amount": 2800.0
},
{
"date": "16.11.2018",
"amount": 2800.0
},
{
"date": "17.12.2018",
"amount": 2800.0
},
{
"date": "16.01.2019",
"amount": 2800.0
},
{
"date": "18.02.2019",
"amount": 2800.0
},
{
"date": "18.03.2019",
"amount": 2650.0
}
]
}
]
}
добавлено тело ответа json




Вам нужно удалить последнюю запятую в конце JSON, так как это недопустимый JSON. Как только вы это сделаете, попробуйте еще раз и посмотрите, работает ли это. (Используется JSONBlob для проверки действительности JSON).
Это решение сработало для меня.
ArrayList<JsonElement> jsonElement = response.path("payment_schedule.payment_dates");
String jsonElementGet1 = String.valueOf(jsonElement.get(1));
scheduleArray = (JsonArray)jsonParser.parse(jsonElementGet1);
вы можете показать ответ json?