我刚刚在类似问题的俄语社区回答。也许你在寻找这样的事情:
@XmlElements({
@XmlElement(name = "car", type = Car.class),
@XmlElement(name = "van", type = Van.class)
})
public List<Vehicle> getVehicles() {
return vehicles;
}
一些简单的例子:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.*;
import java.io.StringReader;
import java.util.List;
public class Test {
public static void main(String... args) throws JAXBException {
String xmldata = "<request><car></car><van></van></request>";
StringReader reader = new StringReader(xmldata);
JAXBContext jaxbContext = JAXBContext.newInstance(Request.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Request request = (Request) unmarshaller.unmarshal(reader);
for (Vehicle object : request.getVehicles()) {
System.out.println(object.getClass());
}
}
}
@XmlRootElement(name = "request")
class Request {
private List<Vehicle> vehicles;
@XmlElements({
@XmlElement(name = "car", type = Car.class),
@XmlElement(name = "van", type = Van.class)
})
public List<Vehicle> getVehicles() {
return vehicles;
}
public void setVehicles(List<Vehicle> vehicles) {
this.vehicles = vehicles;
}
}
abstract class Vehicle {
}
class Van extends Vehicle {
}
class Car extends Vehicle {
}
输出将是:
class Car
class Van
UPD:评论后
更新。对于单个条目它无论如何都会正常工作只是删除List
:
@XmlRootElement(name = "request")
class Request {
private Vehicle vehicles;
@XmlElements({
@XmlElement(name = "car", type = Car.class),
@XmlElement(name = "van", type = Van.class)
})
public Vehicle getVehicles() {
return vehicles;
}
public void setVehicles(Vehicle vehicles) {
this.vehicles = vehicles;
}
}
希望这会有所帮助。
您可以使用注释并注释具体的实现。在这种情况下@XmlType()上面的车或范 –