将javaBean转换成XML

依赖

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.2.11</version>
</dependency>
<dependency>
    <groupId>javax.xml</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.11</version>
</dependency>
</dependency>

注解说明

  1. @XmlRootElement,用于类级别的注解,对应xml的跟元素。通过name属性定义这个根节点的名称。
  2. @XmlAccessorType,定义映射这个类中的何种类型都需要映射到xml。(如果不存在@XmlAccessorType,默认使用XmlAccessType.PUBLIC_MEMBER注解)

参数:XmlAccessType.FIELD: java对象中的所有成员变量。
XmlAccessType.PROPERTY:java对象中所有通过getter/setter方式访问的成员变量。

XmlAccessType.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter方式访问的成员变量。

XmlAccessType.NONE: java对象的所有属性都不映射为xml的元素。

  1. @XmlAttribute,用于把java对象的属性映射为xml的属性,并可通过name属性为生成的xml属性指定别名。
  2. @XmlElement,指定一个字段或get/set方法映射到xml的节点。通过name属性定义这个根节点的名称。
  3. @XmlElementWrapper,为数组或集合定义一个父节点。通过name属性定义这个父节点的名称。

XML格式

<country>
   <province></province>
</country>

Java类

@XmlRootElement
public class Country
   private String province;
   
   public String getProvince(){
       return province; 
   }
   public void setProvince(String province){
       this.province = province;
   }
}

测试类

public  static void main(String[ ] args){

      Country country = new Country();
      country.setProvince("zhejiang");
      
      JAXBContext context = JAXBContext.newInstance(Country.class);
      Marshaller marshaller = context.createMarshaller();
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
      StringWriter writer = new StringWriter();
      marshaller.marshal(country, writer);
      System.out.println(writer.toString());
}

结果

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <country>
     <province>zhejiang</province>
  </coutry>
</xml>

格式1

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <country>
     <province>zhejiang</province>
     <province>jiangsu</province>
  </coutry>
</xml>

修改1

@XmlRootElement
public class Country
{
    private List<String> province;

    public String getProvince(){
       return province; 
    }
    public void setProvince(List<String> province){
      this.province = province;
    }
    public static class Province{
       
    }
}

测试1

public  static void main(String[ ] args){

      Country country = new Country();
      List<String> province = new ArrayList<String>();
      province.add("zhejiang");
      province.add("jiangsu");
      JAXBContext context = JAXBContext.newInstance(Country.class);
      Marshaller marshaller = context.createMarshaller();
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
      StringWriter writer = new StringWriter();
      marshaller.marshal(country, writer);
      System.out.println(writer.toString());
}

格式2

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <country>
     <provinceList>
        <province>zhejiang</province>
        <province>jiangsu</province>
     </proviceList>
  </coutry>
</xml>

修改2

@XmlRootElement
public class Country
{
   @XmlElementWrapper
    private List<String> province;

    public String getProvince(){
       return province; 
    }
    public void setProvince(List<String> province){
      this.province = province;
    }
    public static class Province{
       
    }
}

格式3

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <country>
     <provinceList>
        <province-name>zhejiang</province-name>
        <province-name>jiangsu</province-name>
     </proviceList>
  </coutry>
</xml>

修改3

@XmlRootElement
public class Country
{
   @XmlElementWrapper
    private List<String> province;

    @XmlElement(name="province-name")
    public String getProvince(){
       return province; 
    }
    public void setProvince(List<String> province){
      this.province = province;
    }
    public static class Province{
       
    }
}

++在getProvince上面加了一个@XmlElement注解,搞定!++

@XmlElementWrapper和@XmlElement这两个注解的概念

@XmlElementWrapper注解表示生成一个包装器元素,仅允许出现在集合属性上。

@XmlElement注解指定一个字段或get/set方法映射到XML的节点,并且可以通过name属性改变java对象属性在XML节点中的名字。

package com.noah.project.util;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;

/**
 * @date: 2018/04/13
 * @author: wangcd
 * @version: 1.0.0
 * @description:Jaxb2工具类.
 **/
public class JaxbUtil {

    /**
     * 以UTF-8编码的格式将JavaBean转成XML
     * @param o
     * @return
     */
    public static String convertToXml(Object o){
        return convertToXml(o,"UTF-8");
    }

    /**
     * 将JavaBean转成XML
     * @param obj       JavaBean对象
     * @param encoding  xml编码格式,例,"UTF-8"
     * @return
     */
    public static String convertToXml(Object obj,String encoding){
        String result = "";
        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       xml字符串
     * @param cls       JavaBean的class名称 例,Object.class
     * @param <T>
     * @return          返回转换后的JavaBean
     */
    public static <T> T convertToJavaBean(String xml,Class<T> cls){
        T t = null;
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(cls);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            t = (T) unmarshaller.unmarshal(new StringReader(xml));
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return t;
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,635评论 1 92
  • 文/张西影 世界夜景繁灯,颗颗闪光钻石。 人像小偷一样,不在昂首挺胸。 紧缩黑暗一角,让静舔舐不宁。 心存芥蒂害怕...
    豫视西影阅读 262评论 0 0
  • 你的孤独是我被遗忘的忧伤, 我在原地, 一次一次的回首, 寻找彼岸的阳光。 翻滚的白云是我的思恋, 记忆下的留言见...
    王宇爱动漫阅读 428评论 0 0
  • 我曾经暗恋了一个人七年之久,我以为我是足够喜欢他的,否则不可能坚持了那么久。 朋友们一边佩服我的执着,一边问我是因...
    覃梵啊阅读 227评论 0 0
  • 那个女孩都有一个童话梦,美人鱼,星空,大海,月兔……
    大太阳子阅读 298评论 6 1