Как описано в post Retrofit 2 - Dynamic URL , нотация @Url
предполагает, что String является полностью определенным URL-адресом и не проверяет, содержит ли он @Path
переменные.
Чтобы использовать аннотацию @Path
, вам необходимо настроить URL-адрес конечной точки и включить переменную @Path
внутри аннотации @GET()
.
Реализация JAXB (JSR-222) позаботится обо всем для вас. JAXB считает, что каждый класс соответствует сложному типу. У него есть алгоритм для определения имени типа, но вы можете переопределить его, используя аннотацию @XmlType
. Когда элемент неармаллирован, если он содержит атрибут xsi:type
, тогда JAXB будет смотреть, есть ли класс, связанный с этим типом. Если это будет, он будет создавать экземпляр класса этого типа, если он не будет создавать экземпляр типа, соответствующего этому элементу, на основе метаданных сопоставления, предоставленных через аннотации.
Для получения дополнительной информации
UPDATE
Ниже приведен пример, который может помочь:
schema.xsd
В схеме XML ниже сложный тип canadianAddress
расширяет complexType address
.
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/customer"
xmlns:tns="http://www.example.org/customer"
elementFormDefault="qualified">
<element name="customer">
<complexType>
<sequence>
<element name="address" type="tns:address"/>
</sequence>
</complexType>
</element>
<complexType name="address">
<sequence>
<element name="street" type="string"/>
</sequence>
</complexType>
<complexType name="canadianAddress">
<complexContent>
<extension base="tns:address">
<sequence>
<element name="postalCode" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
</schema>
Демо
В демонстрационном коде ниже XML будет преобразован в модель JAXB, сгенерированную из приведенной выше схемы XML, а затем преобразован обратно в XML.
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance("org.example.customer");
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/org/example/customer/input.xml");
Customer customer = (Customer) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, System.out);
}
}
input.xml / Output
Ниже приведен XML. Элемент address
имеет квалификацию xsi:type
, чтобы указать, что он содержит экземпляр canadianAddress
вместо только address
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer xmlns="http://www.example.org/customer">
<address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="canadianAddress">
<street>1 A Street</street>
<postalCode>Ontario</postalCode>
</address>
</customer>
JAXBContext.newInstance("com.example.foo");
– Blaise Doughan 3 June 2013 в 20:40