Java对象与XML互转


本文使用XStream注解方法实现 java 类与 XML 的互转。最近项目使用到了这个功能在此记录一下。

1.引入依赖

        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.7</version>
        </dependency>

2.编写XML工具类

public class XmlUtils {
    //java类转XML
    public static String BeanToXml(Object obj) {
        XStream xstream = new XStream(new DomDriver("utf8"));
        xstream.processAnnotations(obj.getClass()); // 识别obj类中的注解
        /*
         // 以压缩的方式输出XML
         StringWriter sw = new StringWriter();
         xstream.marshal(obj, new CompactWriter(sw));
         return sw.toString();
         */
        // 以格式化的方式输出XML
        return xstream.toXML(obj);
    }
    //XML转java类
    public static <T> T XMLToBean(String xmlStr, Class<T> cls) {
        XStream xstream = new XStream(new DomDriver());
        xstream.processAnnotations(cls);
        @SuppressWarnings("unchecked")
        T t = (T) xstream.fromXML(xmlStr);
        return t;
    }
}

3.编写实体类

@XStreamAlias("Student")
public class Student{
    @XStreamAlias("age")
    private int age;
    @XStreamAlias("name")
    private String name;
 }

4.代码使用

	 //测试脚本
    public void Test(){
		//编写xml字符串
        String xmlMsg="<Student>" + "<age>23</age>" + "<name>张三</name>" + "</Student>";
        //xml 转 java 实体类
        Student student= XmlUtils.XMLToBean(xmlMsg, Student.class);
		System.out.println("age: " + student.age +" name: " + student.name);
		//java类转xml
        String xmlstr = XmlUtils.BeanToXml(student);
        System.out.println(xmlstr);
    }

5.编写过程遇到的问题

1. Xml 工具类中的 BeanToXml 方法

(1)转换成对应的类时出错,错误:java.lang.ClassCastException: 实体类路径 cannot be cast to 
实体类路径,此问题是 spring 的 devtools 引起的 ,需要将以下依赖注掉即可
<!--spring-boot-devtools-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
	
(2)使用此方法时,如果没有设置字段属性值,转换后的 xml 字符串将会缺少某些字段。
	例:
		Student s = new Student();
		String xmlstr = XmlUtils.BeanToXml(s);
 		System.out.println(xmlstr);
 		此时将输出,int 默认值 为 0,所以有输出值,String 为 null,没有输出字段
 		<Student> 
 			<age>0</age>
 		</Student>
	解决此问题方法只需要将 name 设置一个值即可。
	例:
		Student s = new Student();
		s.setName("");
		String xmlstr = XmlUtils.BeanToXml(s);
 		System.out.println(xmlstr);
 		此时将输出完整 xml
 		<Student> 
 			<age>0</age>
 			<name></name>
 		</Student>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值