Java 弹簧&x2B;具有相同元素根的JAXB-Unmarshal XML

Java 弹簧&x2B;具有相同元素根的JAXB-Unmarshal XML,java,xml,spring,jaxb,Java,Xml,Spring,Jaxb,我使用RestTemplate调用2个不同的Rest API,返回以下XML: <response><user>...</user></response> <response><client>...</client></response> 我无法控制API,无法修改响应XML 如何处理两个不同的响应和相同的根元素 谢谢。您可以有一个响应类,其中包含一个用户和一个客户端类,这两个类将是响应根元素中包含

我使用RestTemplate调用2个不同的Rest API,返回以下XML:

<response><user>...</user></response>
<response><client>...</client></response>
我无法控制API,无法修改响应XML

如何处理两个不同的响应和相同的根元素


谢谢。

您可以有一个响应类,其中包含一个用户和一个客户端类,这两个类将是响应根元素中包含的元素。诸如此类:

@XmlRootElement(name = "response")
@XmlAccessorType(XmlAccessType.FIELD)
class Response {
    @XmlElement(required = false)
    private User user;
    @XmlElement(required = false)
    private Client client;
}

class User {
}

class Client {
}

如果您知道需要哪种类型的响应,您可以省去
@XmlRootElement
注释,使用一种取
参数的解组方法。

因为您有两个不同的REST API调用,基于调用的REST服务,您可能可以解组(解析)使用RestTemplate.exchange(字符串url、HttpMethod方法、HttpEntity requestEntity、类responseType、对象…uriVariables)对相应classI am的响应;我正在创建RestTemplate并传递消息转换器和要绑定的已知类。如果我将类设置为使用相同的@XmlRootElement名称绑定,则消息转换器将始终使用列表中最后一个设置。
@XmlRootElement(name = "response")
@XmlAccessorType(XmlAccessType.FIELD)
class Response {
    @XmlElement(required = false)
    private User user;
    @XmlElement(required = false)
    private Client client;
}

class User {
}

class Client {
}