java实现JavaBean与xml互转方式以及工具类

1、jaxb2实现JavaBean与xml互转
工具类下载地址
1.1、工具类
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
	 * @param obj
	 * @return
	 */
	public static String convertToXml(Object obj) {
		return convertToXml(obj, "UTF-8");
	}

	/* *
	 * JavaBean转换成xml
	 * @param obj
	 * @param encoding
	 * @return
	 */
	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
	 * @param xml
	 * @param c
	 * @return
	 */
	public static <T> T converyToJavaBean(String xml, Class<T> 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;
	}
}

1.2、测试类
package com.example.springsecuritydemo;

import com.example.springsecuritydemo.jaxb2.*;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.xml.bind.JAXBException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@SpringBootTest
class SpringsecuritydemoApplicationTests {

    @Test
    void contextLoads() {
    }


    /**
     * @throws JAXBException
     */
    @Test
    public void showMarshaller()  {
        Book book = new Book();
        book.setId(100);
        book.setAuthor("James");
        book.setCalendar(new Date());
        book.setPrice(23.45f);	 //默认是0.0

        String str = JaxbUtil.convertToXml(book);
        System.out.println(str);
    }

    /**
     * @throws JAXBException
     */
    @Test
    public void showUnMarshaller() {
        String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
                "<book id=\"100\">" +
                "    <author>James</author>" +
                "   <calendar>2013-03-29T09:25:56.004+08:00</calendar>" +
                "  <price_1>23.45</price_1>" +
                "</book>";

        Book book = JaxbUtil.converyToJavaBean(str, Book.class);
        System.out.println(book);
    }


    @Test
    public void showMarshaller1() {

        Student student = new Student();
        student.setId(12);
        student.setName("test");

        Role role = new Role();
        role.setDesc("管理");
        role.setName("班长");

        student.setRole(role);

        String str = JaxbUtil.convertToXml(student);
        System.out.println(str);
    }

    @Test
    public void showUnMarshaller1() {
        String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"+
                "<student id=\"12\">"+
                "    <name>test</name>"+
                "   <role>"+
                "      <name>班长</name>"+
                "     <desc>管理</desc>"+
                "</role>"+
                "</student>";
        Student student = JaxbUtil.converyToJavaBean(str, Student.class);
        System.out.println(student);
    }

    /**
     * @throws JAXBException
     */
    @Test
    public void showMarshaller2() {
        Country country = new Country();
        country.setName("中国");

        List<Province> list = new ArrayList<Province>();
        Province province = new Province();
        province.setName("江苏省");
        province.setProvCity("南京市");
        Province province2 = new Province();
        province2.setName("浙江省");
        province2.setProvCity("杭州市");
        list.add(province);
        list.add(province2);

        country.setProvinceList(list);

        String str = JaxbUtil.convertToXml(country);
        System.out.println(str);
    }

    /**
     *
     */
    @Test
    public void showUnMarshaller2() {
        String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"+
                "<country>"+
                "    <country_name>中国</country_name>"+
                "    <provinces>"+
                "        <province>"+
                "            <province_name>江苏省</province_name>"+
                "           <prov_city>南京市</prov_city>"+
                "        </province>"+
                "       <province>"+
                "           <province_name>浙江省</province_name>"+
                "           <prov_city>杭州市</prov_city>"+
                "       </province>"+
                "    </provinces>"+
                "</country>";
        Country country = JaxbUtil.converyToJavaBean(str, Country.class);
        System.out.println(country);
    }
}

1.3、实体类
package com.example.springsecuritydemo.jaxb2;

import lombok.Data;

import java.util.Date;

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


@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlType(name = "book", propOrder = { "author", "calendar", "price", "id" })
@Data
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;
	
}

package com.example.springsecuritydemo.jaxb2;

import lombok.Data;

import javax.xml.bind.annotation.*;
import java.util.List;


@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "country")
@XmlType(propOrder = { "name", "provinceList" })
@Data
public class Country {

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

	@XmlElementWrapper(name = "provinces")
	@XmlElement(name = "province")
	private List<Province> provinceList;
}

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;


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "name", "provCity" })
@Data
public class Province {

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

	@XmlElement(name = "prov_city")
	private String provCity;

}

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;


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "name", "desc" })
@Data
public class Role {

	@XmlElement
	private String name;

	@XmlElement
	private String desc;
	
}

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


@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "student")
@XmlType(propOrder = {})
@Data
public class Student {

	@XmlAttribute
	private Integer id;

	@XmlElement
	private String name;

	@XmlElement(name = "role")
	private Role role;
	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值