Отправить тело JSON, используя Rest Assured, но сервер игнорирует его - PullRequest
0 голосов
/ 05 марта 2019

Я столкнулся с трудностями при использовании RestAssered.Моя цель отправить POST запрос на создание пользователя.Как я это делаю (из документации https://github.com/rest-assured/rest-assured/wiki/Usage):

Map<String, Object>  jsonAsMap = new HashMap<>();
    jsonAsMap.put("username", "John");
    jsonAsMap.put("email", "testkdd@test.test");

    response = restAssured.given()
            .contentType(JSON)
            .header("Authorization", db.getAuthToken())
            .body(jsonAsMap)
            .when()
            .log().all()
            .post(apiCreateManager_POST);
    response.then().log().all();

Запрос:

Request method: POST
Request URI:    https://myapplication/api/v1/manager/managers
Proxy:          <none>
Request params: <none>
Query params:   <none>
Form params:    <none>
Path params:    <none>
Headers:        Authorization=Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXU....
                Accept=*/*
                Content-Type=application/json; charset=UTF-8
Cookies:        <none>
Multiparts:     <none>
Body:
{
    "email": "testkdd@test.test",
    "username": "John"
}

Ответ:

HTTP/1.1 422 Unprocessable Entity
Server: nginx/1.12.0
Date: Tue, 05 Mar 2019 10:52:54 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.1.20-1+ubuntu16.04.1+deb.sury.org+1
Cache-Control: private, must-revalidate
pragma: no-cache
expires: -1

{
    "errors": {
        "username": [
            "This value should not be null.",
            "This value should not be blank."
        ],
        "email": [
            "This value should not be blank."       
        ]
    }
}

Сервер не увидел мои параметры JSON. Iпроверил сервер с помощью Почтальона и все было в порядке.

1 Ответ

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

Я нашел решение!Проблема была в Content-Type = application / json; charset = UTF-8

Вы должны избегать автоматического добавления кодировки в заголовок типа контента:

RestAssured.config = RestAssured.config().encoderConfig(encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false));

И после этого мы имеем:

Content-Type=application/json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...