将javaBean转换成XML

每次编程遇到困难想要查资料的时候,百度搜索的过程总是让人心累,经常查一个问题就要花去大半天的时间,有些时候还不一定能得到正确的信息。工作了一段时间,大大小小的项目也做过了一些,也遇到了很大大小小的坑。因此我计划将工作中已经成功使用的技术做一个整理,一方面可以给大家提供一些参考。当然啦,也还有一点点私心:便于日后遗忘的时候查阅。

今天要给大家介绍的是如何将javaBean转换成XML。我采用的是JAXB注解的方式。废话不多说,直接上例子。比如我想要组的一个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>

符合我们的要求。看到这里你应该已经会使用JAXB了。

接下来再跟大家介绍一些高级点的用法。

还是country和province为例子,比如我想要生成这个的一个XML:

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

显然,要实现这样的效果,原先的Country类已经不能完成这个任务了,我们需要对Country类做一点修改,如下所示:

@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{
       
    }
}

当然了,测试类也要跟着小小地改动一下,如下所示:

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());
}

改动以后的代码将会得到这样的一个XML。

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

结果完全正确。

接着跟大家介绍几个比较常用的注解,它们是@XmlElementWrapper、@XmlElement

我们先来体会一下它是怎么用的,稍后再跟大家介绍它的概念。

产品经理看了我的XML文件后觉得还不错,但是他说还有改进的空间,他想要下面这样的XML:

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

身为一枚研发,虽然很憎恨产品经理总是改需求,但是仔细想想这个需求也是合理的啊,你想,毕竟province是同一个类型的数据,这个时候为了理解方便,我当然是在这些province外面加上一个provinceList比较合适了。好吧,那我就改改吧。

这个时候我们不需要再改动代码了,只要用一个注解就可以了,用哪个注解呢,就是之前提到过的@XmlElementWrapper。那么问题来了,这个注解要放在那里呢?看下面的代码:

@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{
       
    }
}

看到了吧,就把@XmlElementWrapper放在province属性的上面。

本来想着可以下班了,这时候烦人的产品经理又来了,他说,可能还要麻烦你再改一改,我想要下面这样的XML:

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

我还有什么话好说呢,改就改吧,不过这是最后一次了,这次改完别再来找我了。其实改下也不难,就只要加一个@XmlElement注解。嘿嘿,就欺负你产品经理不懂技术。

@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节点中的名字。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值