
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 staticT 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转换
@Testpublic 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转换
@Testpublic void showUnMarshaller() { String str = " " + "" + " "; Book book = JaxbUtil.convertToJavaBean(str, Book.class); System.out.println(book);}James " + "2013-03-29T09:25:56.004+08:00 " + "23.45 " + "
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 ListprovinceList;}
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之间的互转。工具类支持多种编码格式,并且提供了详细的错误处理机制,确保转换过程的稳定性和可靠性。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月29日 03时52分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument".
2023-01-23
#if 0 #elif 1 #else #endif 用法
2023-01-23
#include <gdiplus.h>出错
2023-01-23
$ajax({}).done 和 $ajax({}) success 区别
2023-01-23
(反射+内省机制的运用)处理jdbc的结果集
2023-01-23
(反射+内省机制的运用)简单模拟spring IoC容器的操作
2023-01-23
(转)tomcat7.0 manager app和host manager web管理
2023-01-23
(转)使用公用表表达式的递归查询(SQLSERVER2005)
2023-01-23
(转)在CListView列表视图中添加右键菜单的方法
2023-01-23
.Net(C#)实现异步编程
2023-01-23
.Net中webBrowser控件JS交互
2023-01-23
.Net中webBrowser控件指定IE版本
2023-01-23
02-docker系列-镜像分类以及操作(导入、导出、删除)
2023-01-23
02-Docker镜像分类及操作秘籍,轻松掌握导出、导入、删除
2023-01-23
04-docker-commit构建自定义镜像
2023-01-23
04-docker系列-commit构建自定义镜像
2023-01-23
05-docker系列-使用dockerfile构建镜像
2023-01-23