【发布时间】:2012-02-03 01:12:39
【问题描述】:
我在客户端和服务器上都设置了使用 Jaxb2 的 MarshallingMessageConverter
关注this问题。
这是在服务器端:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(marshallingMessageConverter());
}
public MarshallingHttpMessageConverter marshallingMessageConverter() {
return new MarshallingHttpMessageConverter(jaxb2Marshaller(), jaxb2Marshaller());
}
public Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(new Class[]{
User.class
});
return marshaller;
}
}
客户端:
@Configuration
public class RESTConfig {
@Bean
public MarshallingHttpMessageConverter marshallingMessageConverter() {
return new MarshallingHttpMessageConverter(jaxb2Marshaller(), jaxb2Marshaller());
}
@Bean
public Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(new Class[] {
User.class
});
return marshaller;
}
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>();
//converters.addAll(restTemplate.getMessageConverters());
converters.add(marshallingMessageConverter());
restTemplate.setMessageConverters(converters);
return restTemplate;
}
}
检查两个日志:
org.springframework.oxm.jaxb.Jaxb2Marshaller createJaxbContextFromClasses
INFO: Creating JAXBContext with classes to be bound [class com.cloudlb.model.User]
当我尝试检索用户时。我得到了这个
org.springframework.web.client.RestClientException:
Could not extract response: no suitable HttpMessageConverter found for response type [com.cloudlb.model.User] and content type [application/xml]
我错过了什么吗?
我通过将其检索为 String.class 进行检查,它工作正常。以 XML 文件格式返回。
我要实现XML XML Object>
User user = restTemplate.getForObject(url, User.class);
已编辑:这是我的控制器
@Controller
@RequestMapping("/user")
public class UserServiceController {
@Autowired
private UserService userService;
public UserServiceController() {}
@RequestMapping(value="/{id}", method = RequestMethod.GET)
@ResponseBody
public User findUserById(@PathVariable("id") String id) {
return userService.findById(id);
}
}
提前谢谢你。
【问题讨论】:
-
您的 User 类是如何定义的 - 它有 @XmlRootElement 注释吗?
-
是的,我有。看起来像这样
@Entity @Table(name = "user") @XmlRootElement(name = "user") public class User implements Serializable { ... } -
我们能看到处理您请求的控制器吗?
标签: java xml spring spring-mvc configuration