java实现JavaBean与xml互转方式以及工具类
发布日期:2021-05-07 20:08:38 浏览次数:23 分类:精选文章

本文共 5424 字,大约阅读时间需要 18 分钟。

JAXB2实现JavaBean与XML互转

1. JAXB2工具类

1.1 工具类概述

在JAXB2(Java API for XML Binding)中,工具类是实现JavaBean与XML互转的核心。通过自定义工具类,可以方便地将Java对象转换为XML格式,或者从XML解析出Java对象。以下是我们自定义的JAXB2工具类。


1.2 JaxbUtil工具类

package com.example.springsecuritydemo.jaxb2;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
/**
* JAXB2工具类
* @author swq
* @create 2021-04-19 21:46
*/
public class JaxbUtil {
/* 将JavaBean转换为XML,默认编码为UTF-8 */
public static String convertToXml(Object obj) {
return convertToXml(obj, "UTF-8");
}
/* 将JavaBean转换为XML,指定编码 */
public static String convertToXml(Object obj, String encoding) {
String result = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/* 将XML转换为JavaBean */
public static
T convertToJavaBean(String xml, Class
c) {
T t = null;
try {
JAXBContext context = JAXBContext.newInstance(c);
Unmarshaller unmarshaller = context.createUnmarshaller();
t = (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
}

2. 测试类

2.1 测试类概述

为了验证工具类的功能,我们创建了一系列测试类。这些测试类涵盖了JavaBean与XML互转的主要场景,包括单个对象转换、复杂对象转换以及包含嵌套结构的转换。


2.2 测试用例

测试用例1:简单JavaBean转换

@Test
public void showMarshaller() {
Book book = new Book();
book.setId(100);
book.setAuthor("James");
book.setCalendar(new Date());
book.setPrice(23.45f);
String str = JaxbUtil.convertToXml(book);
System.out.println(str);
}

测试用例2:复杂JavaBean转换

@Test
public void showUnMarshaller() {
String str = "
" +
"
" +
"
James
" +
"
2013-03-29T09:25:56.004+08:00
" +
"
23.45
" +
"
";
Book book = JaxbUtil.convertToJavaBean(str, Book.class);
System.out.println(book);
}

3. 实体类

3.1 Book实体类

package com.example.springsecuritydemo.jaxb2;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "book")
@XmlType(name = "book", propOrder = { "author", "calendar", "price", "id" })
public class Book {
@XmlElement(required = true)
private String author;
@XmlElement(name = "price_1", required = true)
private float price;
@XmlElement
private Date calendar;
@XmlAttribute
private Integer id;
}

3.2 Country实体类

package com.example.springsecuritydemo.jaxb2;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "country")
public class Country {
@XmlElement(name = "country_name")
private String name;
@XmlElementWrapper(name = "provinces")
@XmlElement(name = "province")
private List
provinceList;
}

3.3 Province实体类

package com.example.springsecuritydemo.jaxb2;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "name", "provCity" })
public class Province {
@XmlElement(name = "province_name")
private String name;
@XmlElement(name = "prov_city")
private String provCity;
}

3.4 Role实体类

package com.example.springsecuritydemo.jaxb2;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "name", "desc" })
public class Role {
@XmlElement
private String name;
@XmlElement
private String desc;
}

3.5 Student实体类

package com.example.springsecuritydemo.jaxb2;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "student")
public class Student {
@XmlAttribute
private Integer id;
@XmlElement
private String name;
@XmlElement(name = "role")
private Role role;
}

通过以上JAXB2工具类和实体类,您可以轻松实现JavaBean与XML之间的互转。工具类支持多种编码格式,并且提供了详细的错误处理机制,确保转换过程的稳定性和可靠性。

上一篇:Java实现8种常见的排序算法
下一篇:Hutool 读取csv文件和输出csv文件

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月29日 03时52分51秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章