当前位置:   article > 正文

使用JAXB实现JavaBean与XML互相转换

使用JAXB实现JavaBean与XML互相转换

JAXB 注解列表

注解使用范围描述
@XmlAccessorOrder包、类控制类中字段和属性的顺序。
@XmlAccessorType包、类此注释提供对类中属性和字段的默认序列化的控制。
@XmlRootElement类、枚举将类或枚举类型映射到XML元素。此注释可与以下注释一起使用:XmlType、XmlEnum、XmlAccessorType、XmlAccessorOrder。
@XmlElement字段将JavaBean属性映射到从属性名称派生的XML元素
@XmlElementWrapper字段围绕XML表示生成包装器元素。这主要用于围绕集合生成包装XML元素。此注释可与以下注释一起使用:XmlElement、XmlElements、XmlElementRef、XmlElementRefs、XmlJavaTypeAdapter。
@XmlAttribute字段将JavaBean属性映射到XML属性。
@XmlValue字段将字段或属性映射到 XML 标记上的文本值。

JAXB 注解示例

xml文件根元素的定义

  1. import javax.xml.bind.annotation.*;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. @XmlRootElement(name = "Root")
  5. @XmlAccessorType(XmlAccessType.FIELD)
  6. public class Root implements Serializable {
  7. private static final long serialVersionUID = 1L;
  8. @XmlAttribute(name = "id")
  9. private String id;
  10. @XmlElementWrapper(name = "records")
  11. @XmlElement(name = "record")
  12. private List<Record> record;
  13. public String getId() {
  14. return id;
  15. }
  16. public void setId(String id) {
  17. this.id = id;
  18. }
  19. public List<Record> getRecord() {
  20. return record;
  21. }
  22. public void setRecord(List<Record> record) {
  23. this.record = record;
  24. }
  25. }

子节点下的类定义

  1. import javax.xml.bind.annotation.XmlElement;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. public class Record implements Serializable {
  5. private static final long serialVersionUID = 1L;
  6. private List<Item> item;
  7. public List<Item> getItem() {
  8. return item;
  9. }
  10. @XmlElement(name = "item")
  11. public void setItem(List<Item> item) {
  12. this.item = item;
  13. }
  14. }
  1. import javax.xml.bind.annotation.XmlAttribute;
  2. import javax.xml.bind.annotation.XmlValue;
  3. import java.io.Serializable;
  4. public class Item implements Serializable {
  5. private static final long serialVersionUID = 1L;
  6. private String id;
  7. private String dataType;
  8. private String perDataProId;
  9. private String value;
  10. public String getId() {
  11. return id;
  12. }
  13. @XmlAttribute(name = "id")
  14. public void setId(String id) {
  15. this.id = id;
  16. }
  17. public String getDataType() {
  18. return dataType;
  19. }
  20. @XmlAttribute(name = "dataType")
  21. public void setDataType(String dataType) {
  22. this.dataType = dataType;
  23. }
  24. public String getPerDataProId() {
  25. return perDataProId;
  26. }
  27. @XmlAttribute(name = "perDataProId")
  28. public void setPerDataProId(String perDataProId) {
  29. this.perDataProId = perDataProId;
  30. }
  31. public String getValue() {
  32. return value;
  33. }
  34. @XmlValue
  35. public void setValue(String value) {
  36. this.value = value;
  37. }
  38. }

xml数据结构格式

  1. <Root id="Root">
  2. <records>
  3. <record id="">
  4. <item id="field1" dataType="java.lang.String" perDataProId="">1</item>
  5. <item id="field2" dataType="java.lang.String" perDataProId="">2</item>
  6. <item id="field3" dataType="java.lang.String" perDataProId="">3</item>
  7. <item id="field4" dataType="java.lang.String" perDataProId="">4</item>
  8. <item id="field6" dataType="java.lang.String" perDataProId="">6</item>
  9. <item id="field7" dataType="java.lang.String" perDataProId="">7</item>
  10. </record>
  11. </records>
  12. </Root>

javaBean和xml转换工具类

  1. import cn.hutool.json.JSONUtil;
  2. import javax.xml.bind.JAXBContext;
  3. import javax.xml.bind.JAXBException;
  4. import javax.xml.bind.Marshaller;
  5. import javax.xml.bind.Unmarshaller;
  6. import java.io.StringReader;
  7. import java.io.StringWriter;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. public class BeanXmlUtils {
  11. /**
  12. * bean转xml
  13. * @param obj 需要转换的对象
  14. * @param load 对应的class
  15. * @param config isFormat:是否需要格式[默认:false],charSet:字符集[默认:utf-8],xmlHeader:是否需要xml头部[默认:false]
  16. **/
  17. public static String beanToXml(Object obj, Class<?> load,Object... config) {
  18. String xmlStr = null;
  19. try {
  20. boolean isFormat = false;
  21. String charSet = "utf-8";
  22. boolean xmlHeader = false;
  23. if (config.length>=1){
  24. isFormat = (Boolean) config[0];
  25. if (config.length>=2){
  26. charSet = (String)config[1];
  27. }
  28. if (config.length>=3){
  29. xmlHeader = (Boolean)config[2];
  30. }
  31. }
  32. JAXBContext context = JAXBContext.newInstance(load);
  33. Marshaller marshaller = context.createMarshaller();
  34. marshaller.setProperty(Marshaller.JAXB_FRAGMENT, xmlHeader);
  35. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, isFormat);
  36. marshaller.setProperty(Marshaller.JAXB_ENCODING,charSet);
  37. StringWriter writer = new StringWriter();
  38. marshaller.marshal(obj, writer);
  39. xmlStr = writer.toString();
  40. } catch (JAXBException e) {
  41. e.printStackTrace();
  42. }
  43. return xmlStr;
  44. }
  45. /**
  46. * xml转bean
  47. * @param str
  48. * @param load
  49. * @return T
  50. **/
  51. public static <T> T xmlToBean(String str, Class<T> load) {
  52. Object object = null;
  53. try {
  54. JAXBContext context = JAXBContext.newInstance(load);
  55. Unmarshaller unmarshaller = context.createUnmarshaller();
  56. object = unmarshaller.unmarshal(new StringReader(str));
  57. } catch (JAXBException e) {
  58. e.printStackTrace();
  59. }
  60. return (T)object;
  61. }
  62. public static void main(String[] args) {
  63. //xmlToBean();
  64. beanToXml();
  65. }
  66. private static void xmlToBean() {
  67. String xmlStr = "<Root id=\"Root\">\n" +
  68. "<records>\n" +
  69. "\t<record id=\"\">\n" +
  70. "\t<item id=\"field1\" dataType=\"java.lang.String\" perDataProId=\"\">1</item>\n" +
  71. "\t<item id=\"field2\" dataType=\"java.lang.String\" perDataProId=\"\">2</item>\n" +
  72. "\t<item id=\"field3\" dataType=\"java.lang.String\" perDataProId=\"\">3</item>\n" +
  73. "\t<item id=\"field4\" dataType=\"java.lang.String\" perDataProId=\"\">4</item>\n" +
  74. "\t<item id=\"field5\" dataType=\"java.lang.String\" perDataProId=\"\">5</item>\n" +
  75. "\t<item id=\"field6\" dataType=\"java.lang.String\" perDataProId=\"\">6</item>\n" +
  76. "\t<item id=\"field7\" dataType=\"java.lang.String\" perDataProId=\"\">7</item>\n" +
  77. "\t</record>\n" +
  78. "</records>\n" +
  79. "</Root>";
  80. Root root = xmlToBean(xmlStr, Root.class);
  81. System.out.println(JSONUtil.toJsonPrettyStr(root));
  82. }
  83. private static void beanToXml() {
  84. Root root = new Root();
  85. root.setId("Root");
  86. List<Record> records = new ArrayList<>();
  87. List<Item> items = new ArrayList<>();
  88. Item item = new Item();
  89. item.setId("itemCode");
  90. item.setDataType("java.lang.String");
  91. item.setPerDataProId("");
  92. item.setValue("TZ0001");
  93. Item item1 = new Item();
  94. item1.setId("itemName");
  95. item1.setValue("吹风机");
  96. items.add(item);
  97. items.add(item1);
  98. Record record = new Record();
  99. record.setItem(items);
  100. records.add(record);
  101. root.setRecord(records);
  102. String xmlStr = beanToXml(root, Root.class, false);
  103. System.out.println(xmlStr);
  104. }
  105. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/421630
推荐阅读
相关标签
  

闽ICP备14008679号