问题描述:
把java对象转换成xml,对象中有集合,集合中又有对象,描述:对象A中有一个List<B>,list集合中的对象是B
使用的jar包是:jre自带的rt.jar包
解决方法:
代码示例如下
ReturnResXml.java
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
//根节点
@XmlRootElement(name = "Response")
@XmlAccessorType(XmlAccessType.FIELD)
//节点属性
@XmlType(propOrder = { "RetCode","RetMsg","Number","Student"})
public class ReturnResXml{
private Integer RetCode;
private String RetMsg;
private Integer Number;
//集合对象
@XmlElement(name = "Student")
private List<Student> Student;
public Integer getRetCode() {
return RetCode;
}
public void setRetCode(Integer retCode) {
RetCode = retCode;
}
public String getRetMsg() {
return RetMsg;
}
public void setRetMsg(String retMsg) {
RetMsg = retMsg;
}
public Integer getNumber() {
return Number;
}
public void setNumber(Integer number) {
Number = number;
}
public List<Student> getNotice() {
return Student;
}
public void setNotice(List<Student> student) {
Student = student;
}
public Student student(String Name,String Date,String Order,List<Parameter> Parameters) {
Student no = new Student();
no.setDate(Date);
no.setName(Name);
no.setOrder(Order);
no.setParameters(Parameters);
return no;
};
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "Name","Date","Order","Parameters"})
class Student{
private String Name;
private String Date;
private String Order;
@XmlElement(name = "Parameter")
private List<Parameter> Parameters;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getDate() {
return Date;
}
public void setDate(String date) {
Date = date;
}
public String getOrder() {
return Order;
}
public void setOrder(String order) {
Order = order;
}
public List<Parameter> getParameters() {
return Parameters;
}
public void setParameters(List<Parameter> parameters) {
Parameters = parameters;
}
}
Parameter.java
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "Name","Value"})
public class Parameter {
public Parameter() {}
public Parameter(String name,String value){
this.Name = name;
this.Value = value;
}
private String Name;
private String Value;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getValue() {
return Value;
}
public void setValue(String value) {
Value = value;
}
}
测试代码如下:
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.PropertyException;
import com.ReturnResXml;
import com.Parameter;
public class Test {
@SuppressWarnings({ "unchecked", "static-access", "rawtypes" })
public static void main(String[] args) {
try {
ReturnResXml o = new ReturnResXml();
o.setRetCode(1);
o.setRetMsg("123");
o.setNumber(12);
List list = new ArrayList();
List<Parameter> ps = new ArrayList<Parameter>();
ps.add(new Parameter("参数1", "123"));
ps.add(new Parameter("参数2", "456"));
list.add(o.notice("123", "asdf", "sfwe", ps));
list.add(o.notice("456", "asdf", "sfwe", ps));
list.add(o.notice("789", "asdf", "sfwe", ps));
o.setNotice(list);
JAXBContext con = JAXBContext.newInstance(ReturnResXml.class);
Marshaller ms = con.createMarshaller();
ms.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
//XML格式
ms.setProperty(ms.JAXB_FORMATTED_OUTPUT, true);
//是否显示xml的头部<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
ms.setProperty(ms.JAXB_FRAGMENT,false);
StringWriter writer = new StringWriter();
ms.marshal(o, writer);
System.out.println(writer.toString());
} catch (PropertyException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
控制台输出内容为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Response>
<RetCode>1</RetCode>
<RetMsg>123</RetMsg>
<Number>12</Number>
<Student>
<Name>123</Name>
<Date>asdf</Date>
<Order>sfwe</Order>
<Parameter>
<Name>参数1</Name>
<Value>123</Value>
</Parameter>
<Parameter>
<Name>参数2</Name>
<Value>456</Value>
</Parameter>
</Student>
<Student>
<Name>456</Name>
<Date>asdf</Date>
<Order>sfwe</Order>
<Parameter>
<Name>参数1</Name>
<Value>123</Value>
</Parameter>
<Parameter>
<Name>参数2</Name>
<Value>456</Value>
</Parameter>
</Student>
<Student>
<Name>789</Name>
<Date>asdf</Date>
<Order>sfwe</Order>
<Parameter>
<Name>参数1</Name>
<Value>123</Value>
</Parameter>
<Parameter>
<Name>参数2</Name>
<Value>456</Value>
</Parameter>
</Student>
</Response>