欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAXB的初步使用

程序员文章站 2022-03-20 17:46:38
...

JAXB在程序中主要是用来将javabean以xml的形式输出,具体的请自行百度

先了解几个概念

@XmlType  主要是用来给xml的节点排序使用的,使用参数`propOrder`,在其中输入字段的
具体顺序,然后xml文件的节点会按照这个顺序输出
@XmlRootElement 根节点, `name`配置节点的名字
@XmlAccessorType 控制字段的序列化的方式 属性XmlAccessType有4个常量值:FIELD
 表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)
 字段到XML;PROPERTY表示java对象中所有通过getter/setter方式绑定成属性到XML;
 PUBLIC_MEMBER表示Java对象中所有的public访问权限的成员变量和通过getter/setter
 方式访问的成员变量,该值为默认值;NONE表示Java对象的所有属性都不映射为XML的元素
 @XmlAccessorOrder 控制JAXB 绑定类中属性和字段的排序,有两个属性
    AccessorOrder.ALPHABETICAL——对生成的XML元素按字母书序排序 
    XmlAccessOrder.UNDEFINED——不排序,默认为该值;
 @XmlElement 配置字段属于节点
 @XmlAttribute 配置字段属于节点的属性

具体的代码

package cn.demo;

import javax.xml.bind.annotation.*;


import java.io.Serializable;

//JavaBean代码

@XmlType(propOrder = {})
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)
public class Demo1 implements Serializable {

    private String Demo1Name;
    private int age;
    private String role;
    private String bibi;
    private User user;
    public Demo1(){}

    public Demo1(String Demo1Name, int age, String role, String bibi,User user) {
        this.Demo1Name = Demo1Name;
        this.age = age;
        this.role = role;
        this.bibi = bibi;
        this.user = user;
    }

    public String getDemo1Name() {
        return Demo1Name;
    }

    public void setDemo1Name(String Demo1Name) {
        this.Demo1Name = Demo1Name;
    }

    @XmlElement
    public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @XmlElement
    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    @XmlAttribute
    public String getBibi() {
        return bibi;
    }

    public void setBibi(String bibi) {
        this.bibi = bibi;
    }

    @Override
    public String toString() {
        return "Demo1{" +
                "Demo1Name='" + Demo1Name + '\'' +
                ", age=" + age +
                ", role='" + role + '\'' +
                ", bibi='" + bibi + '\'' +
                '}';
    }
}


package cn.demo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="user")
@XmlAccessorType(XmlAccessType.FIELD)
public class User {

	 private String name;
	    private String id;

	    public User() {
	    }

	    public User(String name, String id) {
	        this.name = name;
	        this.id = id;
	    }

	    @Override
	    public String toString() {
	        return "Menu{" +
	                "name='" + name + '\'' +
	                ", id='" + id + '\'' +
	                '}';
	    }
}

package cn.demo;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import org.junit.Test;

//测试
public class Test1 {
  @Test
  public void saveXmlTest() {
	  User user = new User("jia","123");
      Demo1 Demo1 = new Demo1("陈本布衣", 2018, "超级管理员","瞎哔哔",user);
      File file = new File("E://Demo1.xml");
      try {
          JAXBContext jaxbContext = JAXBContext.newInstance(Demo1.class);
          Marshaller marshaller = jaxbContext.createMarshaller();
          //格式化输出,即按标签自动换行,否则就是一行输出
          marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
          //设置编码(默认编码就是utf-8)
          marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
          //是否省略xml头信息,默认不省略(false)
          marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);
          marshaller.marshal(Demo1, file);
      } catch (JAXBException e) {
          e.printStackTrace();
      }
  }
  }

根据上述的代码可以在E盘下生成一个xml文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<demo1 bibi="瞎哔哔">
    <age>2018</age>
    <demo1Name>陈本布衣</demo1Name>
    <role>超级管理员</role>
    <user>
        <name>jia</name>
        <id>123</id>
    </user>
</demo1>

相关标签: jaxb