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控制即可。
相关文章推荐
- 新浪微博开发-项目主体框架确定&MVVM
- 【PAT】1044. 火星数字(20)
- 顺序查找
- 数论+dfs+复数除法剪枝 Secret Code hdu1111
- day07—SQL基本查询
- python---通过networkx使图着色结果可视化
- .net iis 域名泛解析实战
- 1192: [HNOI2006]鬼谷子的钱袋
- Linux入门学习教程:在Ubuntu 14.04中安装使用搜狗拼音输入法
- 20jquery题
- 在xml文件中写CDATA方式
- 软考大纲
- jQuery面试题答案
- ErrorException: curl_setopt(): The usage of the @filename API for file uploading is deprecated.
- [LeetCode]40 和的组合 II
- 通过构造系统服务分发实现拦截&过滤 (仿360游戏保险箱)
- 微信团队讲课笔记 Android 开发(二)UI设计
- linux 进程备忘
- 小刚的Android研究笔记~在未开启USB调试的Android手机绕过锁屏密码
- 将网页添加至阅读列表——SSReadingList