2012-10-24 4 views
0

Я использовал RestTemplate некоторое время и всегда был доволен!RestTemplate - Put - Wrong Accept Header - Обход проблемы

Но теперь это отстой.

Я использовал, чтобы сделать мой положить так:

 RestTemplate restTemplate = new RestTemplate(); 
     restTemplate.getMessageConverters().add(new GsonHttpMessageConverter()); 
     restTemplate.put(URI, object); 

Обычно мой сервер принимал формат в URL в пути Ruby: resource.json

Но теперь я потребляя сервер, который больше не делает этого. Мне нужно использовать Header для обработки формата.

Все в порядке, restTemplate задает тип содержимого для приложения/json, но не устанавливает заголовок Accept. Таким образом, мой сервер выдает ошибку 406, потому что формат по умолчанию - это HTML, и он не отображает html.

Итак, у кого-нибудь есть обходное решение для размещения как содержимого, так и принятия заголовка json и добавления форматированного текста в формате json?

+0

поэкспериментировать с методом headForHeaders в RestTemplate. он возвращает карту, поэтому попробуйте добавить заголовок accept – toadzky

+0

, проверьте это [выпуск] (https://jira.springsource.org/browse/SPR-5866?focusedCommentId=51932&page=com.atlassian.jira.plugin.system .issuetabpanels: comment-tabpanel # comment-51932) – toadzky

+0

Я попробую! – Dam

ответ

1

Вы можете получить заголовки из объекта RestTemplate и добавить то, что вам нужно (поскольку заголовки - это не что иное, как карта).

Вот пример кода предоставляется Dam после того как он получил это работает:

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter()); 
HttpHeaders requestHeaders = new HttpHeaders(); 
requestHeaders.setContentType(MediaType.APPLICATION_JSON); 
requestHeaders.setAccept(Arrays.asList(new MediaType[] {MediaType.APPLICATION_JSON})); 
HttpEntity<T> requestEntity = new HttpEntity<T>((T) parameter, requestHeaders); 
restTemplate.exchange(URI , HttpMethod.PUT, requestEntity, null); 
Смежные вопросы