相关注解
参考: 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-8
marshal.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;
}
}
测试
@Test
public 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>