Java Bean与Xml转换

基于Jaxb实现Java Bean与Xml转换

  • Jdk自带,不需要依赖第三方jar,工具类代码如下:
package utils;

import entity.Book;
import entity.Role;
import entity.Student;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Date;

/**
 * xml转换工具类
 * java bean与xml相互转换
 * jdk自带,不需要依赖第三方jar
 */
public class JaxbUtil {
    
    

    private static final String DEFAULT_ENCODING = "UTF-8";

    public static String toXml(Object object) {
    
    
        return toXml(object, DEFAULT_ENCODING);
    }

    public static String toXml(Object object, String encoding) {
    
    
        try {
    
    
            JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
            StringWriter writer = new StringWriter();
            marshaller.marshal(object, writer);
            return writer.toString();
        } catch (JAXBException e) {
    
    
            e.printStackTrace();
        }
        return "";
    }

    @SuppressWarnings("unchecked")
    public static <T> T toObject(String xml, Class<T> clazz) {
    
    
        T object = null;
        try {
    
    
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            object = (T) unmarshaller.unmarshal(new StringReader(xml));
        } catch (JAXBException e) {
    
    
            e.printStackTrace();
        }
        return object;
    }

    //测试
    public static void main(String[] args) {
    
    
        //1.基础对象序列化测试
        Book book = new Book();
        book.setAuthor("张三");
        book.setDate(new Date());
//        book.setId(1);
        book.setPrice(79.1);
        book.setProp("你好");

        String s = toXml(book);
        System.out.println(s);

        //2.复杂对象序列化测试
        Role role = new Role();
        role.setDesc("role1");
        role.setName("角色1");
        role.setId("456");
        Student student = new Student();
        student.setId(123);
        student.setName("student");
        student.setRole(role);
        String s1 = toXml(student);
        System.out.println(s1);

        //3.反序列化测试
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
                "<student id=\"123\">\n" +
                "    <name>student</name>\n" +
                "    <role id=\"456\">\n" +
                "        <NAME>角色1</NAME>\n" +
                "        <DESC>role1</DESC>\n" +
                "    </role>\n" +
                "</student>";
        Student student1 = toObject(xml, Student.class);
        System.out.println(student1);

        //4.todo 集合对象测试
    }
}
package entity;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;

//测试类Book 
//@XmlRootElement为必须的
@XmlRootElement
public class Book {
    
    

    @XmlAttribute(name = "activiti:id", required = true)
    private Integer id;

    @XmlElement
    private String author;

    //required = true时,取对应类型的默认值
    //double为0.0,Double为null
    //当对象类型的值为null时,不生成对应的标签
    //为""时,生成空标签
    //不能同时有get方法
    //既没有@XmlElement,也没有get方法时,不会生成对应标签
    @XmlElement(required = true)
    private Date date;

    @XmlElement
    private Double price;

    @XmlAttribute
    private String prop;

//    private

//    public int getId() {
    
    
//        return id;
//    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

//    public String getAuthor() {
    
    
//        return author;
//    }

    public void setAuthor(String author) {
    
    
        this.author = author;
    }

//    public Date getDate() {
    
    
//        return date;
//    }

    public void setDate(Date date) {
    
    
        this.date = date;
    }

//    public double getPrice() {
    
    
//        return price;
//    }

    public void setPrice(Double price) {
    
    
        this.price = price;
    }

    public void setProp(String prop) {
    
    
        this.prop = prop;
    }
}
package entity;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

//测试类Student
@XmlRootElement
public class Student {
    
    

    @XmlAttribute
    private int id;

    @XmlElement
    private String name;

    @XmlElement
    private Role role;


    public void setId(int id) {
    
    
        this.id = id;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

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

    @Override
    public String toString() {
    
    
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", role=" + role +
                '}';
    }
}
package entity;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

//测试类Role
@XmlRootElement
public class Role {
    
    

    @XmlElement(name = "NAME")
    private String name;

    @XmlElement(name = "DESC")
    private String desc;

    @XmlAttribute
    private String id;

    public void setName(String name) {
    
    
        this.name = name;
    }

    public void setDesc(String desc) {
    
    
        this.desc = desc;
    }

    public void setId(String id) {
    
    
        this.id = id;
    }

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

Guess you like

Origin blog.csdn.net/csdnklsdm/article/details/117998873