Java对象转换成XML

有时候,我们需要把Java对象转换成XML文件。这时可以用JAXB来实现。(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了)、

假如某个公司有许多部门,每个部门有许多职员,我们可以这样来设计简单的bean对象。

@XmlRootElement(name="department")  
public class Department {  

    private String name;    //部门名称  
    private List<Staff> staffs;           // 其实staff是单复同型,这里是加's'是为了区别staff  

    public String getName() {  
        return name;  
    }  
    @XmlAttribute  
    public void setName(String name) {  
        this.name = name;  
    }  
    public List<Staff> getStaffs() { 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
@XmlRootElement(name="staff")  
public class Staff {  

    private String name;    // 职员名称  
    private int age;        // 职员年龄  
    private boolean smoker; // 是否为烟民  

    public String getName() {  
        return name;  
    }  
    @XmlElement  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getAge() {  
        return age;  
    }  
    @XmlElement  
    public void setAge(int age) {  
        this.age = age;  
    }  
    public boolean isSmoker() {  
        return smoker;  
    }  
    @XmlAttribute  
    public void setSmoker(boolean smoker) {  
        this.smoker = smoker;  
    }  
}  
 
 
  • 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
  • 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

下面将生成一个简单的对象,并转换成XML字符串。

public class Main {  

    public static void main(String[] args) throws Exception {  

        public static void main(String[] args) throws Exception {  

        JAXBContext context = JAXBContext.newInstance(Department.class,Staff.class);    // 获取上下文对象  
        Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象  

        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");  // 设置编码字符集  
         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进  
          marshaller.marshal(getSimpleDepartment(),System.out);   // 打印到控制台  
          ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        marshaller.marshal(getSimpleDepartment(), baos);  
        String xmlObj = new String(baos.toByteArray());         // 生成XML字符串  
        System.out.println(xmlObj);  
    }  

    /** 
     * 生成一个简单的Department对象 
     * @return 
     */  
    private static Department getSimpleDepartment() {  
        List<Staff> staffs = new ArrayList<Staff>();  

        Staff stf = new Staff();  
        stf.setName("周杰伦");  
        stf.setAge(30);  
        stf.setSmoker(false);  
        staffs.add(stf);  
        stf.setName("周笔畅");  
        stf.setAge(28);  
        stf.setSmoker(false);  
        staffs.add(stf);  
        stf.setName("周星驰");  
        stf.setAge(40);  
        stf.setSmoker(true);  
        staffs.add(stf);  

        Department dept = new Department();  
        dept.setName("娱乐圈");  
        dept.setStaffs(staffs);  

        return dept;  
    }  
}  
 
 
  • 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
  • 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

控制台打印信息:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>  
<department name="娱乐圈">  
    <staff smoker="true">  
        <age>30</age>  
        <name>周杰伦</name>  
    </staff>  
    <staff smoker="true">  
        <age>28</age>  
        <name>周笔畅</name>  
    </staff>  
    <staff smoker="true">  
        <age>40</age>  
        <name>周星驰</name>  
    </staff>  
</department>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

注意到,我们可以用Marshaller.marshal方法将对象转换成xml文件,也可以用UnMarshaller.unmarshal将xml转换成对象。

===============补充理论知识说明========================

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB)

JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 
Marshaller接口,将Java对象序列化为XML数据。 
Unmarshaller接口,将XML数据反序列化为Java对象。 
JDK中JAXB相关的重要Annotation:(来源于百度百科JAXB)

@XmlType,将Java类或枚举类型映射到XML模式类型 
@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。 
@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。 
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。 
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。 
@XmlRootElement,将Java类或枚举类型映射到XML元素。 
@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。 
@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。

在以上的注解中,用的最多的是@XMLType,@XmlAccessorType,@XmlRootElement

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Java对象换为XML格式的请求体,您可以使用Java的JAXB(Java Architecture for XML Binding)库。以下是一个简单的示例代码: 1. 首先,您需要在Java对象上添加JAXB注解,以指定对象如何映射到XML。例如,假设您有一个名为`Person`的Java类: ```java import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "person") public class Person { private String name; private int age; public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } } ``` 在上面的代码中,我们使用`@XmlRootElement`注解指定了根元素的名称,并使用`@XmlElement`注解指定了每个属性要映射到XML元素的方式。 2. 使用JAXB将Java对象换为XML格式请求体。以下是一个简单的示例: ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; public class ObjectToXmlConverterExample { public static void main(String[] args) { Person person = new Person(); person.setName("John"); person.setAge(30); try { JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); StringWriter writer = new StringWriter(); marshaller.marshal(person, writer); String xmlRequestBody = writer.toString(); System.out.println(xmlRequestBody); } catch (JAXBException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们首先创建一个`Person`对象,并设置其属性。然后,我们使用`JAXBContext`创建一个`Marshaller`对象,并将其配置为格式化输出。接下来,我们使用`StringWriter`来捕获换后的XML,并将其打印出来。 这样,您就可以将Java对象换为XML格式的请求体了。请注意,这只是一个简单的示例,实际应用中可能需要根据您的需求进行适当的调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值