JAXB笔记(java bean与xml互相转换)

260 阅读1分钟

简介

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

常用注解

常用注解:

@XmlRootElement:

作用和用法:

    类级别的注解,将类映射为xml全局元素,也就是根元素。就像spring配置文件中的beans。

@XmlElement:

作用和用法:

字段,方法,参数级别的注解。该注解可以将被注解的字段(非静态),或者被注解的get/set方法对应的字段
映射为本地元素,也就是子元素。
默认使用字段名或get/set方法去掉前缀剩下部分小写作为元素名(在字段名和get/set方法符合命名规范的情况下)。

简单例子

package com.example.eurekahi;

import lombok.Data;

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.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;


@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "classes")
public class Classes {
    @XmlElement(name = "class")
    List<ClassT> classes;
}

@XmlAccessorType(XmlAccessType.FIELD)
@Data
class ClassT {
    /**
     * <pre>
     * 年级ID
     * </pre>
     */
    private String classId;

    /**
     * <pre>
     * 年级名称
     * </pre>
     */
    private String className;
    @XmlElementWrapper(name = "students")
    @XmlElement(name = "student")
    List<Student> students;
}


@Data
class Student {

    /**
     * <pre>
     * 学生ID
     * </pre>
     */
    private String studentId;

    /**
     * <pre>
     * 学生名称
     * </pre>
     */
    private String studentName;

    /**
     * <pre>
     * 性别
     * </pre>
     */
    private String sex;

    /**
     * <pre>
     * 年龄
     * </pre>
     */
    private String age;
}
public static void main(String[] args) {
    String xml = "<?xml version="1.0" encoding="UTF-8" ?>\n" +
            "<classes>\n" +
            "    <class>\n" +
            "        <classId>年级ID</classId>\n" +
            "        <className>年级名称</className>\n" +
            "        <students>\n" +
            "            <student>\n" +
            "                <studentId>学生ID</studentId>\n" +
            "                <studentName>学生名称</studentName>\n" +
            "                <sex>性别</sex>\n" +
            "                <age>年龄</age>\n" +
            "            </student>\n" +
            "        </students>\n" +
            "    </class>\n" +
            "</classes>";
    Classes root = (Classes) XMLUtil.convertXmlStrToObject(Classes.class, xml);
    System.out.println();
}