JAXBContext 设置xml节点属性
在使用JAXBContext将javaBean转化为xml时
会出现这样的需求:
1
2
3
|
< xml version = "2.0" >
....
</ xml >
|
那么xml节点里的属性值version需要怎么设置
使用@XmlAttribute标签即可,如下代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@XmlRootElement (name = "Xml" )
@XmlAccessorType (XmlAccessType.FIELD)
public class RequestBean{
@XmlAttribute (name = "version" ) //设置节点属性
private String version;
private Body body;
@XmlElement (name = "sign" ) //设置子节点
private String sign;
//省略封装
}
@XmlRootElement (name = "Body" )
@XmlAccessorType (XmlAccessType.FIELD)
public class Body{
...
}
|
最终得到的xml文件大致为:
1
2
3
4
5
6
7
8
9
|
< Xml version = "2.0" >
< sign >111111</ sign >
< Body >
< Amount >111</ Amount >
< Fee >fee</ Fee >
< PayerName >payname</ PayerName >
< AccountType >accountType</ AccountType >
</ Body >
</ Xml >
|
JAXBContext解析XML集合对象
@XmlElementWrapper 为数组元素或集合元素定义一个父节点。
如,类中有一元素为List items,若不加此注解,该元素将被映射为
1
2
|
< items >...</ items >
< items >...</ items >
|
这种形式,此注解可将这个元素进行包装,如:
1
2
3
|
@XmlElementWrapper (name= "items" )
@XmlElement (name= "item" )
public List items;
|
将会生成这样的XML样式:
1
2
3
4
|
< items >
< item >...</ item >
< item >...</ item >
</ items >
|
Demo如下:
实体类一(定义一个被包含的子项Item):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package org.ywzn.po;
import javax.xml.bind.annotation.XmlAttribute;
public class Item {
private String infoType;
private String nodeId;
private String resultCode;
private String resultString;
public Item() {
super ();
}
public Item(String infoType, String nodeId, String resultCode,
String resultString) {
super ();
this .infoType = infoType;
this .nodeId = nodeId;
this .resultCode = resultCode;
this .resultString = resultString;
}
@XmlAttribute (name = "InfoType" )
public String getInfoType() {
return infoType;
}
public void setInfoType(String infoType) {
this .infoType = infoType;
}
public String getNodeId() {
return nodeId;
}
public void setNodeId(String nodeId) {
this .nodeId = nodeId;
}
public String getResultCode() {
return resultCode;
}
public void setResultCode(String resultCode) {
this .resultCode = resultCode;
}
public String getResultString() {
return resultString;
}
public void setResultString(String resultString) {
this .resultString = resultString;
}
}
|
实体类二(定义一个有List集合的实体类):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package org.ywzn.po;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Message {
private String version;
private Head head;
private List<Item> items;
@XmlAttribute (name= "version" )
public String getVersion() {
return version;
}
public void setVersion(String version) {
this .version = version;
}
@XmlElement (name= "Head" )
public Head getHead() {
return head;
}
public void setHead(Head head) {
this .head = head;
}
public List<Item> getItems() {
return items;
}
@XmlElementWrapper (name= "Items" )
@XmlElement (name= "Item" )
public void setItems(List<Item> items) {
this .items = items;
}
}
|
测试方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package org.ywzn.main;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.ywzn.po.Head;
import org.ywzn.po.Item;
import org.ywzn.po.Message;
import org.ywzn.po.Parameters;
import org.ywzn.po.Room;
public class Java2XMLMany {
public static void main(String[] args) {
// <?xml version='1.0' encoding='UTF-8' standalone='no' ?> <Message
// version='1.0'><Header Time='2015-05-22 10:34:27' MessageType='LOGIN'
// BusinessId='B730EB39-CEFF-4a38-B633-D8936EB8AEF7' SessionId='936'
// /><Parameters> <items Sum='1' Offset='1' Cur='1'> <item
// Infotype='LogUser'> <PassWord
// >D41D8CD98F00B204E9800998ECF8427E</PassWord></item> </items>
// </Parameters> </Message>
// TODO Auto-generated method stub
Item item = new Item( "LOGIN" , "789" , "xxx" , "xxx" );
List<Item> list = new ArrayList<Item>();
list.add(item);
Head head = new Head( "2015-05-21 16:46:14" , "LOGIN" , "8D24CE2B-5" );
Parameters parameters = new Parameters(list);
// Message message = new Message(head,"1.0",parameters);
Message message = new Message();
message.setVersion( "1.0" );
message.setHead(head);
message.setItems(list);
try {
JAXBContext context = JAXBContext.newInstance(Message. class );
Marshaller createMarshaller = context.createMarshaller();
createMarshaller
.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true ); // 是否格式化生成的xml串
createMarshaller.marshal(message, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
|
输出:
1
2
3
4
5
6
7
8
9
10
11
|
<? xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
< message version = "1.0" >
< Head businessId = "8D24CE2B-5" MessageType = "LOGIN" Time = "2015-05-21 16:46:14" />
< Items >
< Item InfoType = "LOGIN" >
< nodeId >789</ nodeId >
< resultCode >xxx</ resultCode >
< resultString >xxx</ resultString >
</ Item >
</ Items >
</ message >
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Dawn_Bells/article/details/81908275