it-roy-ru.com

Spring RestTemplate для POST запрос с пользовательскими заголовками и объектом запроса

В Spring RestTemplate есть способ отправки пользовательских заголовков вместе с объектом запроса POST. Я уже опробовал метод exchange, который доступен. Кажется, что мы можем отправлять пары ключ-значение вместе с пользовательскими заголовками, но не сам объект запроса, присоединенный к HttpEntity.. Следующий код иллюстрирует попытку, и для сервера она выглядит как 400 BadRequest

    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setContentType(MediaType.APPLICATION_JSON);

    HttpEntity<?> httpEntity = new HttpEntity<Object>(requestDTO, requestHeaders);

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.exchange(URL, HttpMethod.POST, httpEntity, SomeObject.class);

Кто-нибудь знает об этой ситуации? Или это то, что я не могу сделать?

16
MCF

Да, это возможно, если использовать заголовки MultiValueMap вместо HttpHeaders

Пример:

MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Authorization", "Basic " + base64Creds);
headers.add("Content-Type", "application/json");

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

HttpEntity<ObjectToPass> request = new HttpEntity<ObjectToPass>(objectToPassInstance, headers);

restTemplate.postForObject(urlPost, request, Boolean.class);

Boolean.class только потому, что мой контроллер возвращает логическое значение в этой конечной точке (может быть что угодно)

Удачи с кодированием!

66
Andrey
  1. Попробуйте включить полную отладку пакета Spring. Я уверен, что вы получите больше Информации о вашем "400 Bad Request":

    <logger name="org.springframework">
        <level value="DEBUG"/>
    </logger>
    
  2. Попробуйте отправить тот же запрос любыми другими инструментами отдыха (например, плагином Rest ConsoleChrome).

  3. Посмотрите, что происходит в консоли отладки браузера (например, вкладка «Сеть» для Chrome).

Эти шаги всегда помогают мне.

0
vvelikodny

Если вы используете HttpClient 3.x, включите ведение журнала, выполнив this . Если вы используете HttpClient 4.x, включите ведение журнала, выполнив this . Это должно сказать вам, что отправляется по проводам, и стать достойной отправной точкой для отладки.

0
Emerson Farrugia