«Application / vnd.api + json» выбрасывает «Неподдерживаемый тип носителя» - PullRequest
1 голос
/ 04 апреля 2020

Я автоматизирую API для вызова POST, используя Rest Assured и для заголовка Content-Type и ACCEPT, я должен использовать « application / vnd.api + json». Но каждый раз, когда я использую «application / vnd.api + json», я получаю код состояния 415. Хотя тот же POST-вызов с использованием Postman работает отлично.

Вот мой пример кода:

    ApiUtils.setBaseURI("xxxxx"); 
            ApiUtils.setBasePath("/orders"); 
            RequestSpecification request = RestAssured.given().auth().oauth2(BaseClass.token);
            request.header("ACCEPT", "application/vnd.api+json");
            request.header("Content-Type", "application/vnd.api+json");
            request.body(JsonCreator.createJson());
            Response response = request.post();

Ниже приведен ответ

Request method: POST
Request URI:    https://xxxxxx/orders

Headers:        ACCEPT=application/vnd.api+json
                Content-Type=application/vnd.api+json; charset=ISO-8859-1
Cookies:        <none>
Multiparts:     <none>
Body:
{
    "data": {
        "type": "orders",
        "attributes": {
            "external_id": "2020-04-04-172",
            "order_items": [
                {
                    "menu_item_id": "5d29ae25805aaf0009095410",
                    "variation_id": "5d29ae25805aaf0009095418",
                    "quantity": 1,
                    "note": "some note"
                }
            ],
            "revenue_center_id": "5d7b44021a2976000938da62",
            "order_type_id": "5d27329790a5ba0009386a75",
            "guests": [
                {
                    "first_name": "xx",
                    "last_name": "xx",
                    "email": "xx@gp.com",
                    "phone": "5551234567"
                }
            ],
            "tip_amount": "1.00"
        }
    }
}

{"errors":[{"status":415,"code":415,"title":"Content-Type must be JSON API-compliant"}],"jsonapi":{"version":"1.0"}}

Я попытался изменить Тип содержимого для приложения / json, как это предлагается в других публикациях / комментариях, но это неправильно для моего ресурса.

В настоящее время я использую Rest Assured v4.3.0 и json -path v4 .3.0. Также для создания тела запроса я использую библиотеку com.google.gson.JsonObject.

1 Ответ

1 голос
/ 04 апреля 2020

В журналах видно, что отправляется сообщение " charset = ISO-8859-1 ", которое автоматически добавляется программой Rest Assured, .config () отключает это, а кодировка не отправляется

Попробуйте следующее

ApiUtils.setBaseURI("orders");
ApiUtils.setBasePath("/orders");
RequestSpecification request = RestAssured.given().auth().oauth2(BaseClass.token).header("Content-Type", "application/vnd.api+json").header("Accept", "application/vnd.api+json").config(RestAssured.config().encoderConfig(encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false))).log().all();
request.body(JsonCreator.createJson());
Response response = request.post();

Для этого также необходимо указать c import

import stati c io.restassured.config.EncoderConfig.encoderConfig;

https://github.com/rest-assured/rest-assured/wiki/Usage#avoid автоматическое добавление заголовка набора символов к типу содержимого автоматически

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