XmlRootElement
8132 ワード
役割は
JAvaオブジェクトxmlファイル間の変換
JAXB Annotation
@XmlRootElement//xmlファイルのルート要素
@XmlElement
@XmlAccessorType//クラス内で、どのようなメンバーがxmlに変換されて伝送できるかを示すFIELD PROPERTY...
@XmlTransient
@XmlJavaTypeAdaptor
=========================================
次に例を示します.
Boy.java
次に、実行結果を示します.
CYDavidはまずmarshallをxmlファイルにし、
xmlファイルunmarshalをjava objectにします.
--------------------------------------------------
変更1:
@XmlAccessorType(XmlAccessType.FIELD) --> @XmlAccessorType(XmlAccessType.PROPERTY)
属性のみがxmlのラベルに変換されるという意味です.
再実行の結果は次のとおりです.
CY
つまりjava objectをxmlに変換する場合、nameは属性ではありません(get setメソッドはありませんので)、nameはラベルに変換されません.
-----------------------------------------------------
変更2:
1を変更した上で、nameプロパティにget setメソッドを追加します.再実行の結果:
CYDavidから@XmlAccessorTypeというannotationの役割が分かる.
-----------------------------------------------------
変更3:
2を変更した上で、Boyにfieldを追加し、int age=10、すなわち:
明らかに、このageはxmlファイルに変換されません.解決策は次のとおりです.
@XmlElement annotationを加える.実行結果:
10 CYDavid
--------------------------------------
ルート要素の場合、属性を設定できます.
@XmlRootElement(name="b"nameSpace="http://test")
これにより、生成されたxmlファイルでラベルがラベルに変わります.ネーミングスペースを追加します.
----------------------------------------
@XmlJavaType Adaptorの役割について説明します.
Java objectがxmlに変換された場合、インタフェースAddressは変換できません.
ここに@XmlJavaType Adapter(AddressAdapter.class)を追加します
AddressAdaptorクラスを1つ多く書きます.
このクラスはAddressインタフェースの特定の実装クラスのオブジェクトを返します.
これが@XmlJavaType Adapterの役割です.
転載先:https://www.cnblogs.com/hujingwei/p/4737383.html
JAvaオブジェクトxmlファイル間の変換
JAXB Annotation
@XmlRootElement//xmlファイルのルート要素
@XmlElement
@XmlAccessorType//クラス内で、どのようなメンバーがxmlに変換されて伝送できるかを示すFIELD PROPERTY...
@XmlTransient
@XmlJavaTypeAdaptor
=========================================
次に例を示します.
Boy.java
package jaxb;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;
@XmlRootElement //
@XmlAccessorType(XmlAccessType.FIELD)
public class Boy {
String name = "CY";
}
JAXBTest.java
package jaxb;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class JAXBTest {
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(Boy.class);
Marshaller marshaller = context.createMarshaller();
Unmarshaller unmarshaller = context.createUnmarshaller();
Boy boy = new Boy();
marshaller.marshal(boy, System.out);
System.out.println();
String xml = "David ";
Boy boy2 = (Boy) unmarshaller.unmarshal(new StringReader(xml));
System.out.println(boy2.name);
}
}
次に、実行結果を示します.
CYDavidはまずmarshallをxmlファイルにし、
xmlファイルunmarshalをjava objectにします.
--------------------------------------------------
変更1:
@XmlAccessorType(XmlAccessType.FIELD) --> @XmlAccessorType(XmlAccessType.PROPERTY)
属性のみがxmlのラベルに変換されるという意味です.
再実行の結果は次のとおりです.
CY
つまりjava objectをxmlに変換する場合、nameは属性ではありません(get setメソッドはありませんので)、nameはラベルに変換されません.
-----------------------------------------------------
変更2:
1を変更した上で、nameプロパティにget setメソッドを追加します.再実行の結果:
CYDavidから@XmlAccessorTypeというannotationの役割が分かる.
-----------------------------------------------------
変更3:
2を変更した上で、Boyにfieldを追加し、int age=10、すなわち:
package jaxb;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
String name = "CY";
int age = 10;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
明らかに、このageはxmlファイルに変換されません.解決策は次のとおりです.
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;
@XmlRootElement // bixude
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
String name = "CY";
@XmlElement
int age = 10;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@XmlElement annotationを加える.実行結果:
10 CYDavid
--------------------------------------
ルート要素の場合、属性を設定できます.
@XmlRootElement(name="b"nameSpace="http://test")
これにより、生成されたxmlファイルでラベルがラベルに変わります.ネーミングスペースを追加します.
----------------------------------------
@XmlJavaType Adaptorの役割について説明します.
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
private String name = "CY";
private Address address; //
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Java objectがxmlに変換された場合、インタフェースAddressは変換できません.
ここに@XmlJavaType Adapter(AddressAdapter.class)を追加します
AddressAdaptorクラスを1つ多く書きます.
このクラスはAddressインタフェースの特定の実装クラスのオブジェクトを返します.
これが@XmlJavaType Adapterの役割です.
転載先:https://www.cnblogs.com/hujingwei/p/4737383.html