Spring Boot marshall Xml от RestTemplate без RootElement - PullRequest
0 голосов
/ 27 ноября 2018

Я использую 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 голосов
/ 28 ноября 2018

Поскольку 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;
}

Использованиекакое-то разумное значение в качестве имени элемента в начальных и конечных тегах, возможно, "" и "".

Рассмотрите возможность использования некоторых аннотаций Джексона, например @JacksonXmlRootElement(localName = "blammy") (это локальное имя соответствует моему примеру).

...