问题描述:
把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>