Я пытаюсь сделать 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
} '
Так может кто-нибудь помочь мне понять, как отправить этот запрос?