相关注解
参考: https://blog.csdn.net/songdeitao/article/details/17304395
@XmlType,将Java类或枚举类型映射到XML模式类型
@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
@XmlRootElement,顶层XML元素。
@XmlElement,XML元素。
@XmlAttribute,XML属性。
转换工具类
package com.example.demo.xml;import java.io.StringReader;import java.io.StringWriter;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;public class ObjAndXmlUtil {/*** @param xmlStr 字符串* @param c 对象Class类型* @return 对象实例*/@SuppressWarnings("unchecked")public static <T> T xml2Object(String xmlStr, Class<T> c) {try {JAXBContext context = JAXBContext.newInstance(c);Unmarshaller unmarshaller = context.createUnmarshaller();T t = (T) unmarshaller.unmarshal(new StringReader(xmlStr));return t;} catch (JAXBException e) {e.printStackTrace();return null;}}/*** @param object 对象* @return 返回xmlStr*/public static String object2Xml(Object object) {try {StringWriter writer = new StringWriter();JAXBContext context = JAXBContext.newInstance(object.getClass());Marshaller marshal = context.createMarshaller();// 格式化输出marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 编码格式,默认为utf-8marshal.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// 是否省略xml头信息marshal.setProperty(Marshaller.JAXB_FRAGMENT, false);marshal.setProperty("jaxb.encoding", "utf-8");marshal.marshal(object, writer);return new String(writer.getBuffer());} catch (Exception e) {e.printStackTrace();return null;}}}
DEMO
java实体类
package com.example.demo.xml;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "RootElement")public class Java2XmlDemo {@XmlAttribute(name = "rootAttribute1")public String rootAttribute1;@XmlAttribute(name = "lang")public String lang;@XmlElement(name = "Head")public String head;@XmlElement(name = "Body")public Element element;@XmlRootElement(name = "Element")public static class Element {@XmlElement(name = "ElementDetail")public ElementDetail elementDetail;}@XmlRootElement(name = "ElementDetail")public static class ElementDetail {@XmlAttribute(name = "detailAttribute")public String detailAttribute;}}
测试
@Testpublic void testJava2Xml() {Java2XmlDemo demo = new Java2XmlDemo();demo.rootAttribute1 = "Root";demo.lang = "zh-CN";demo.head = "测试head";Element element = new Element();ElementDetail detail = new ElementDetail();detail.detailAttribute = "测试明细属性";element.elementDetail = detail;demo.element = element;String xml = ObjAndXmlUtil.object2Xml(demo);System.out.println(xml);
结果
<?xml version="1.0" encoding="utf-8" standalone="yes"?><RootElement rootAttribute1="Root" lang="zh-CN"><Head>测试head</Head><Body><ElementDetail detailAttribute="测试明细属性"/></Body></RootElement>
