java对象转换成xml

问题描述:

把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>

发布了61 篇原创文章 · 获赞 9 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u012129030/article/details/102843265
今日推荐