Spring boot RestClient сообщение для объекта без тела запроса приводит к неправильному запросу - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь сделать restTemplate.postForObject () без тела запроса и получаю неверный запрос.

HttpHeaders headers = new HttpHeaders();
      headers.set(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
      headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
      HttpEntity<String> entity = new HttpEntity<>(headers);

      CurrentAccount account = client.postForObject(
          "https://api.dropboxapi.com/2/users/get_current_account", entity, CurrentAccount.class);

ошибка

Caused by: org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: [Error in call to API function "users/get_current_account": Bad HTTP "Content-Type" header: "application/x-www-form-urlencoded".  Expecting one of "application/json", "application/json; charset=utf-8", "text/plain; charset=dropbox-cors-hack".]

При добавлении

 headers.setContentType(MediaType.APPLICATION_JSON);

Я получаю сообщение об ошибке

Caused by: org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: [Error in call to API function "users/get_current_account": request body: could not decode input as JSON]

запрос почтальона работает без тела

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Сообщение об ошибке довольно очевидно. Вы уже установили Accept, но не установили Content-Type

Добавьте подписку к своим заголовкам

import org.springframework.http.MediaType;

...

headers.setContentType(MediaType.APPLICATION_JSON);
0 голосов
/ 15 апреля 2020

Вы также должны указать тело запроса в виде строкового текста "null" . Да, Dropbox Api заявляет, что при отправке запроса POST не требуется отправлять тело, но это ошибка где-то между тем, как Dropbox ожидает пустое представление JSON тела, и тем, как шаблон Spring rest отправляет представление пустого тела JSON, в POST запрос

...