【发布时间】:2020-12-09 15:37:39
【问题描述】:
我正在使用 SpringBoot(API1) 创建一个 REST API。它使用 RestTemplate(API2) 调用另一个 Rest API。 我调用的 API2 需要 xml 输入并提供 xml 输出。
API 2 发回的 XML 输出具有如下结构
<xml>
<IList>
<IDetails>
<Id>INC123</Id>
</IDetails>
<IDetails>
<Id>INC124</Id>
</IDetails>
</IList>
</xml>
我创建的 Pojo 类如下:
@Data
@XmlRootElement(name="xml")
public class IResponse implements Serializable{
private static final long serialVersionUID = 1L;
@XmlElement(name="IList")
public IList iList;
}
@Data
@XmlRootElement(name="IList")
public class IList implements Serializable{
@XmlElement(name="IDetails")
public List<IDetails> iDetails;
}
@Data
@XmlRootElement(name="IDetails")
public class IDetails implements Serializable{
@XmlElement(name="Id")
public String id;
}
我正在打的电话:
ResponseEntity<IList> response = restTemplate.exchange(urlTemplate, HttpMethod.POST, request, IList.class);
url Template 是我调用的 API2。
当执行 restTemplate.exchange 时,如果 200 Ok,我会得到状态代码,以及错误 Invalid mime type "XML;charset=ISO-8859-1": does not contain '/' 。当我调试代码时,我发现这是由包 org.springframework.web.client 中的 responseExtractor.extractData(response) 抛出的;和 doExecute 方法。
我发送的标头是
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_XML);
headers.add(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_VALUE);
headers.add(HttpHeaders.ACCEPT_CHARSET, StandardCharsets.UTF_8.name());
API 正在成功执行,原因是 API 执行的后端任务在我执行流程时发生,但我得到的响应是 Invalid mime type "XML;charset=ISO-8859-1": does not contain '/'。
谁能帮帮我。
【问题讨论】:
-
XML 输出不是格式良好的 XML。它缺少一个关闭文档元素
-
我编辑了这个问题。我发布问题的错误
-
如果将内容类型标头显式设置为字符串值而不是 setContentType 是否有效? headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE);
-
@codebrane:不,那么它也不起作用
标签: spring spring-boot rest