没有RootElement的RestTemplate的Spring Boot marshall Xml

时间:2018-11-27 19:48:10

标签: spring-boot jackson resttemplate

我正在使用这样的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。如何映射对象?

1 个答案:

答案 0 :(得分:0)

由于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") (此本地名称与我的示例匹配)。