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>
上一篇: PHP获取当前脚本的绝对路径方法
下一篇: 详解Vue Cli浏览器兼容性实践
推荐阅读
-
HTML学习笔记之三(localstorage的使用)_html/css_WEB-ITnose
-
详细讲解使用Node.js写一个简单的命令行工具(详细教程)
-
使用Javascript实现图片库的平稳退化
-
JQueryEasyUI Layout布局框架的使用方法
-
Pyspider的基本使用 -- 入门
-
使用迭代器 遍历文件信息的详解_PHP教程
-
使用说明 - 新浪PHP框架纯净版1.1(带漂亮的瀑布流模板)
-
oracle:case 语句使用(用于select子句的case语句中可以使用in这
-
MySQL 使用 LOOP 的 ITERATE 语句示例
-
php使用类继承解决代码重复的问题_PHP教程