@XmlRootElement ,@XmlElementWrapper,@XmlElement,@XmlTransient的使用举例
1 首先是@XmlElementWrapper的使用举例
@XmlRootElement(name = "Message")
@XmlElement(name = "Header")
private OmsTradeHeader Header;
@XmlElementWrapper(name = "Orders")
@XmlElement(name = "Order")
private List<OmsTradeOrder> Orders;
对于上面这种实体类对应的xml如下
<?xml version='1.0' encoding='UTF-8'?>
<Message>
<Header>阿狸</Header>
<Orders>
<Order>1</Order>
<Order>2</Order>
<Order>3</Order>
</Orders>
</Message>
下面是对比
@XmlRootElement(name = "Message")
@XmlElement(name = "Header")
private OmsTradeHeader Header;
@XmlElement(name = "Order")
private List<OmsTradeOrder> Orders;
对于上面这种实体类对应的xml如下,主要是列表不一样
<?xml version='1.0' encoding='UTF-8'?>
<Message>
<Header>龙猫</Header>
<Order>1</Order>
<Order>2</Order>
<Order>3</Order>
</Message>
2 @XmlTransient的使用主要是xml对应的实体类元素名称有重复的情况下,需要对元素的get方法前添加这个注解。下面是例子
@XmlTransient
public String getAddressLine1() {
return addressLine1;
}
public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
}
@XmlTransient
public String getAddressLine2() {
return addressLine2;
}
public void setAddressLine2(String addressLine2) {
this.addressLine2 = addressLine2;
}
3.1 实体类转xml的java写法
ByteArrayOutputStream out = new ByteArrayOutputStream();
JAXBContext cont = JAXBContext.newInstance(Aircity.class);
Marshaller marsh = cont.createMarshaller();
marsh.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marsh.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marsh.marshal(aircity, out);
//aircity是Aircity类的对象
String xml=out.toString();//就得到了我们需要的xml
3.2 java xml转实体类的写法
JAXBContext context = JAXBContext.newInstance(OmsTradeInfo.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
OmsTradeInfo omsTradeInfo = (OmsTradeInfo) unmarshaller.unmarshal(new StringReader(orderData));//orderData是xml文件