您的位置:首页 > 其它

JAXB最佳实践

2016-03-03 00:12 363 查看

JAXB主要用来实现对象和XML之间的序列化和反序列化。

本文主要总结JAXB基本使用方法和注意事项!

通过下文的XML示例内容进行JAXB的简单实践

ProvincesBean ( provinces = [ProvinceBean ( id = B001 name = 北京 code = 30000 citys = null ), ProvinceBean ( id = Z001 name = 浙江 code = 60000 citys = null ), ProvinceBean ( id = J001 name = 江苏 code = 90000 citys = [CityBean ( cityCode = 90001 value = 南京市 ), CityBean ( cityCode = 90002 value = 盐城市 ), CityBean ( cityCode = 90003 value = 扬州市 ), CityBean ( cityCode = 90004 value = 南通市 )] )] )


View Code

[b]注意事项[/b]

1、要序列化的类加上@XmlRootElement注解,否则会报错!

2、JAXB序列化XML时 默认序列化getter和setter,且getter和setter必须成对出现才会被序列化。

3、属性名称,默认序列化出来的类和属性名称默认是首字母转换为小写,若需要控制属性名称需要在getter或setter上
使用 @XmlElement(name = "Province") 指定名称,此处要注意的是@XmlElement也可以放置在getter或setter上都行,
但只能放一个,也就是说不能同时在getter和setter或field字段三者中间任意二者上同时使用 @XmlElement注解!

4、如控制根节点名称?
Re: 使用@XmlRootElement指定name属性即可,如@XmlRootElement(name = "Provinces")。

5、怎么添加命名空间
Re: 使用@XmlRootElement(namespace="my.jaxb") 指定namespace属性,此处不做代码示例。

6、怎么精确控制每个属性名称
Re: JAXB自动转化为首字母小写会导致不可预料的属性名称出现,不嫌麻烦的话为每个属性设置@XmlElement(name=""),想省事的话使用Field字段名称即可。

7、怎么样实现序列化时使用Field字段而不是使用setter和getter
Re: 在要使用的类上面加上@XmlAccessorType(XmlAccessType.FIELD)注解,并指定为XmlAccessType.FIELD,
这里强烈推荐使用@XmlAccessorType(XmlAccessType.FIELD)注解,因为这样你可以精确的控制每个元素的名称,
而不需要为每个属性去设置@XmlElement(name="")注解,当然也可以在Field上使用@XmlElement注解。

8、一个元素既有属性也有文本内容情况如何配置?
Re: 如:<city citycode="90001">南京市</city> ,此时citycode字段通过@XmlAttribute(name = "citycode")控制,value字段通过@XmlValue控制即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: