Тестирование API остальных org.springframework.http.converter.HttpMessageNotReadableException - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь протестировать две конечные точки API отдыха, одна - получение, а другая - публикация.Идея состоит в том, что тело ответа, возвращаемое ответом get, должно быть телом сообщения.

Код, который я использую:

RestAssured.baseURI = ROOT_URI;
RequestSpecification httpRequest = 
RestAssured.given().header("Authorization", "Basic " + encodedString);
String endPoint="/v1/getworkers";
Response response = httpRequest.request(Method.GET, endPoint);
String responseBody = response.getBody().asString();

Теперь тело ответа, которое я получаю:

{"workerDetails":
    [
    {"workerId":"TEST123456",
    "securityId":"TESTWORKERID",
    "workerStatus":"Active",
    "firstName":"Test",
    "lastName":"Userone"}
    ]
}

Теперь я делаю запрос на публикацию и помещаюСтрока responseBody как тело:

RestAssured.baseURI = ROOT_URI;
String endpoint="/v1/PostWorkers";
RequestSpecification httpRequest = 
RestAssured.given().header("Authorization", "Basic " + encodedString)
            .header("Content-Type", "application/json").body(postbody);
Response response = httpRequest.request(Method.POST,endpoint);
String responseBody = response.getBody().asString();

И я получаю ошибку 400:

отметка времени ": 1552670194453," status ": 400," error ":" Bad Request"," exception ":" org.springframework.http.converter.HttpMessageNotReadableException "," message ":" Ошибка синтаксического анализа JSON: Невозможно десериализовать экземпляр java.util.ArrayList из токена START_OBJECT;вложенным исключением является com.fasterxml.jackson.databind.JsonMappingException: невозможно десериализовать экземпляр java.util.ArrayList из маркера START_OBJECT \ n в [Source: java.io.PushbackInputStream@56bba771

Whatделать?

1 Ответ

1 голос
/ 15 марта 2019

Проблема в журнале ошибок:

Ошибка анализа JSON: Невозможно десериализовать экземпляр java.util.ArrayList из маркера START_OBJECT

Это означает, что API ожидает ArrayList в качестве ввода, но вместо этого получает Object в качестве ввода. Другими словами, он будет ожидать ввода с ArrayList<WorkerDetail>, но вы передаете ввод объект WorkerDetails, который содержит поле workerDetails типа ArrayList<WorkerDetail>.

Пожалуйста, попробуйте изменить ответ на запрос на получение от:

String responseBody = response.getBody().asString();

до:

List responseBody = response.jsonPath().getList("workerDetails");

Затем передайте этот responseBody методу body() в запросе POST.

...