【问题标题】:Spring Boot marshall Xml from RestTemplate without RootElement来自没有 RootElement 的 RestTemplate 的 Spring Boot marshall Xml
【发布时间】:2019-04-29 15:07:50
【问题描述】:

我正在使用这样的 RestTemplate:

return this.getForEntity(baseUrl, BasicResponse.class, parameters);

这是 BasicResponse 类:

public class BasicResponse {

private String status;
private String statusMsg;

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getStatusMsg() {
    return statusMsg;
}

public void setStatusMsg(String statusMsg) {
    this.statusMsg = statusMsg;
}

}

没有抛出异常,但返回的 ResponseEntity 正文中的字段为“null”。我认为这是因为该元素没有有效的 XML 结构(如没有根元素)。我无法控制已解析的 XML。如何映射我的对象?

【问题讨论】:

  • 没有根元素的 XML 不是 XML。它伪装成 XML,但失败了。

标签: spring-boot jackson resttemplate


【解决方案1】:

由于 XML 无效, 我相信你将无法使用RestTemplate.getForEntity 获取BasicResponse 对象。

试试这个:

private static final String VALUE_END_TAG = "</blammy>";
private static final String VALUE_START_TAG = "<blammy>";

private XmlMapper xmlMapper; // initialize this correctly, somewhere off page.

method stuff
{
  final String actualResponse;
  final StringBuilder correctedResponse = new StringBuilder();
  final BasicResponse returnValue;

  actualResponse = restTemplate.getForEntity(baseUrl, BasicResponse.class, parameters);

  correctedResponse.append(VALUE_START_TAG);
  correctedResponse.append(actualResponse);
  correctedResponse.append(VALUE_END_TAG);

  returnValue = xmlMapper.readValue(correctedResponse.toString(), BasicResponse.class);

  return returnValue;
}

在开始和结束标签中使用一些合理的值作为元素名称, 也许是“”和“”。

考虑使用一些 Jackson 注释, 例如@JacksonXmlRootElement(localName = "blammy") (此本地名称与我的示例相符)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 2012-01-21
    • 2016-07-27
    • 2021-03-22
    相关资源
    最近更新 更多