Как использовать RestTemplate для выполнения POST-вызова с телом запроса - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь сделать POST-запрос, используя RestTemplate для отправки тела запроса и заголовков.

Для этого я увидел, что многие используют класс HTTPEntity. Но этот класс универсальный тип, который необходимо передать. Тип содержимого - application / json.

В большинстве случаев я видел, что HttpEntity был создан с универсальным типом String. Как это:

HttpEntity<String> requestEntity = new HttpEntity<String>(body, headers);
responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);

Что я не получил, так это как узнать, какой тип данных использовать при создании объекта HttpEntity? Я понял, что мы ResponseEntity анализируем ответ от вызова http в строку. Но я не понял то же самое для http сущности.

Я пытался создать тело в объекте http-сущности с помощью Google JsonObject, например:

JsonObject body = new JsonObject();
body.addProperty("key", "value");
.....

Запрос при попытке в почтальоне работает, но не работает в коде с использованием RestTemplate при использовании http-сущности String.

При использовании типа JsonObject я получаю эту ошибку:

org.springframework.http.converter.HttpMessageNotWritableException: не удалось записать JSON: не примитив JSON

При использовании http-объекта типа String появляется общее сообщение об ошибке, в котором говорится, что запрос недействителен.

Добавление полного тела запроса:

JsonObject body = new JsonObject();
body.addProperty("transaction_id", transaction_id);
body.addProperty("timestamp", timestamp);
body.addProperty("device_token", deviceToken);
if (forUpdate)
    body.addProperty("bit0", true);

Рабочий локон от почтальона:

curl -X POST \ https://api.devicecheck.apple.com/v1/query_two_bits \ -H 'Тип контента: приложение / json' \ -H 'авторизация: Носитель SOME_BEARER_TOKEN_STRING' \ -H 'управление кешем: без кеша -d '{ "device_token": "SOME_DEVICE_TOKEN", "action_id ":" f0bc2e5d-5bd9-4437-a455-fd1e210a6268 ", метка времени: 1557073737608 } '

Так может кто-нибудь помочь мне понять, как отправить этот запрос?

...