java beans xml_将javaBean转换成XML

本文介绍了如何使用Java的JAXB注解将JavaBean转换为XML,通过示例展示了从简单的对象转换到包含列表的对象的转换过程,并讲解了@XmlElementWrapper和@XmlElement注解的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

今天要给大家介绍的是如何将javaBean转换成XML。我采用的是JAXB注解的方式。废话不多说,直接上例子。比如我想要组的一个XML格式是这样的:

我应该怎么做呢?

首先你需要写一个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());

}

输入的结果是这样的:

zhejiang

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

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

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

zhejiang

jiangsu

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

@XmlRootElement

public class Country

{

private List province;

public String getProvince(){

return province;

}

public void setProvince(List province){

this.province = province;

}

public static class Province{

}

}

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

public static void main(String[ ] args){

Country country = new Country();

List province = new ArrayList();

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。

zhejiang

jiangsu

结果完全正确。

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

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

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

zhejiang

jiangsu

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

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

@XmlRootElement

public class Country

{

@XmlElementWrapper

private List province;

public String getProvince(){

return province;

}

public void setProvince(List province){

this.province = province;

}

public static class Province{

}

}

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

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

zhejiang

jiangsu

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

@XmlRootElement

public class Country

{

@XmlElementWrapper

private List province;

@XmlElement(name="province-name")

public String getProvince(){

return province;

}

public void setProvince(List province){

this.province = province;

}

public static class Province{

}

}

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

最后再简单介绍一下@XmlElementWrapper和@XmlElement这两个注解的概念

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值