RestTemplate не подходит HttpMessageConverter

Я понимаю, что с проектом, который я пытаюсь создать, происходит что-то связанное. Я использую RestTemplate. И я пытаюсь подключиться к серверу и получить данные. Все шло хорошо, пока я не решил разбить свою программу более чем на один класс контроллера. Смотри, что я сделал. В каждом из этих новых классов я вставляю в каждый из них:

RestTemplate restTemplate= new RestTemplate();

Чтобы получить данные, я использую только аннотации JAXB (для привязки данных), и я могу получить все, что захочу. Но когда я пытаюсь выполнить эту строку кода в новом классе:

 ResponseEntity<AClass> result = restTemplate.exchange("url",
                        HttpMethod.GET, entity, AClass.class);

Я принимаю это исключение: RestClientException «Не удалось извлечь ответ: не найдено подходящего HttpMessageConverter для типа ответа [AClass] и типа содержимого [application/xml]»

Если я верну его в предыдущий класс, он может быть выполнен без проблем. Я действительно не понимаю, почему. Вероятно, потому что я использую в новом классе новый RestTemplate. Я пытаюсь объявить разные RestTemplates, а также объявить таким образом: @Autowired, но проблема остается. Должен ли я объявить что-то новое в сервлете-диспетчере? Кроме того, могу ли я вызвать во многих классах объект restTemplate(RestTemplate restTemplate=new RestTemplate()). Должен ли я объявить его в определенном классе и вызвать его оттуда? Что мне делать? Жду ваших предложений.


person Alex Dowining    schedule 14.05.2012    source источник


Ответы (1)


Как вы ранее настраивали свой экземпляр restTemplate? Вы должны зарегистрировать MarshallingHttpMessageConverter с экземпляром RestTemplate, иначе он не будет знать, как демаршалировать XML. Что-то вроде этого:

Jaxb2Marshaller jaxbMarshaller = new Jaxb2Marshaller();
// Make sure context paths includes AClass's package
jaxbMarshaller.setContextPaths("com.example.generated");
MarshallingHttpMessageConverter converter = new 
    MarshallingHttpMessageConverter(jaxbMarshaller, jaxbMarshaller);
restTemplate.setMessageConverters(Arrays.<HttpMessageConverter<?>> asList(converter));
person artbristol    schedule 14.05.2012