我意识到我尝试创建的项目会继续有线。我正在使用RestTemplate。我正在尝试连接服务器并检索数据。一切顺利,直到我决定在多个控制器类中打破我的程序。看看我做了什么。在这些新类中的每一个中,我都插入每个类:
RestTemplate restTemplate= new RestTemplate();
为了检索数据我只使用JAXB注释(用于数据绑定),我可以检索我想要的任何内容。但是当我试图在新类中执行这行代码时:
ResponseEntity<AClass> result = restTemplate.exchange("url",
HttpMethod.GET, entity, AClass.class);
我正在接受此异常:RestClientException“无法提取响应:没有为响应类型[AClass]和内容类型[application / xml]找到合适的HttpMessageConverter”
如果我把它放回上一课,可以毫无问题地执行。真的我不明白为什么。可能是因为我在新类中使用了一个新的RestTemplate.I尝试声明不同的RestTemplates并且也以这种方式声明:@Autowired但问题仍然存在。我应该在调度程序servlet中声明一些新内容吗?此外,我可以在许多类中调用对象restTemplate(RestTemplate restTemplate = new RestTemplate())。我应该在特定的类中声明它并从那里调用它吗?我该怎么办?我期待你的主张。
答案 0 :(得分:0)
您之前是如何设置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));