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);
Кто-нибудь знает об этой ситуации? Или это то, что невозможно, что я пытаюсь сделать?
Ответы
Ответ 1
Да, возможно, если использовать заголовки 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 только потому, что мой контроллер возвращает boolean в этой конечной точке (может быть что угодно)
Удачи в кодировании!
Ответ 2
-
Попробуйте включить полный отладочный пакет Spring. Я уверен, что вы получите больше
информацию о вашем "400 Bad Request":
<logger name="org.springframework">
<level value="DEBUG"/>
</logger>
-
Попробуйте отправить тот же запрос с помощью любых инструментов для отдыха (например, Rest Console
Chrome).
-
Посмотрите, что происходит на консоли отладки браузера (например, вкладка "Сеть" для Chrome).
Эти шаги всегда помогают мне.
Ответ 3
Если вы используете HttpClient 3.x, включите ведение журнала, следуя this. Если вы используете HttpClient 4.x, включите ведение журнала, следуя this. Это должно сказать вам, что нужно отправлять по проводам, и быть достойной отправной точкой для отладки.