Spring Boot可以将Xml响应体转换为Java对象,但不能将Java对象转换为Xml请求体

时间:2017-10-13 08:53:38

标签: java xml spring spring-boot

当我尝试使用内容类型application/vnd.vmware.vcloud.session+xml;version=5.6 spring boot发送请求时,会出现以下异常:

  

请求处理失败;嵌套异常是   org.springframework.web.client.RestClientException:
  无法写   请求:找不到适合请求类型的HttpMessageConverter    [com.vmware.vcloud.v1.SessionType] 和内容类型   的 [应用/ vnd.vmware.vcloud.session + xml的;版本= 5.6Hz]

但是当我从服务器获得具有相同内容类型的响应时,spring-boot成功地将响应转换为SessionType对象。

为什么在我尝试发送请求时,spring boot会出现上述异常?

1 个答案:

答案 0 :(得分:0)

我发现了问题。 Jaxb2RootElementHttpMessageConverter可以阅读使用@XmlRootElement@XmlType注释的类。

但它只能编写用@XmlRootElement注释的类。由于我的类未使用@XmlRootElement注释,因此其canWrite方法返回false

@Override
public boolean canRead(Class<?> clazz, MediaType mediaType) {
    return (clazz.isAnnotationPresent(XmlRootElement.class) || clazz.isAnnotationPresent(XmlType.class)) &&
            canRead(mediaType);
}

@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
    return (AnnotationUtils.findAnnotation(clazz, XmlRootElement.class) != null && canWrite(mediaType));
}