Java-JAXB拆分单个属性并绑定到多个字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java-JAXB拆分单个属性并绑定到多个字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2150字,纯文字阅读大概需要4分钟。
内容图文
![Java-JAXB拆分单个属性并绑定到多个字段](/upload/InfoBanner/zyjiaocheng/678/cd4ca473c01d4a3892f655cf9fb78073.jpg)
有没有一种方法可以使用JAXB将单个属性解组/拆分为多个字段?
我在具有时间属性的XML文件中有一个元素(无法更改XML文件).时间属性的精度为微秒.因此,我无法将属性存储在java Date或Joda DateTime字段中.
我想将属性存储在一个简单的自定义DateTime类中,其中亚秒级存储在Integer中,其余时间存储在Java Date中(我无法访问Joda).但是,我一直无法弄清楚如何将单个属性解组为Date和Integer.
XML范例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<Range start="2001-01-01 01:23:45.012345"/>
</root>
简单的自定义DateTime类:
public class DateTime {
Date date;
Integer subseconds;
public Date getDate() {
return this.date;
}
public void setDate(Date date) {
this.date = date;
}
public Integer getSubseconds() {
return this.subseconds;
}
public void setSubseconds(Integer subseconds) {
this.subseconds = subseconds;
}
}
最终解决方案
根据@Blaise Doughan的建议,创建了DateTimeAdapter类:
public class DateTimeAdapter extends XmlAdapter<String, DateTime> {
@Override
public String marshal (DateTime v) {
return v.toString();
}
@Override
public DateTime unmarshal (String v) {
return new DateTime(v);
}
}
更新了自定义DateTime类(添加了构造函数并使它不可变):
public class DateTime {
Date date = new Date();
Integer subseconds = 0;
public DateTime(String dateString) {
if (dateString.matches("^\\d{4}-{\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d+") {
try {
this.date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateString.substring(0, 19));
}
catch (ParseException ex) {
ex.printStackTrace();
}
this.subseconds = Integer.valueOf(dateString.substring(20));
}
}
public Date getDate() {
return this.date;
}
public Integer getSubseconds() {
return this.subseconds;
}
...additional methods...
}
我选择在自定义DateTime类构造函数中而不是XmlAdapter中进行字符串转换,以便除解组外还可以在其他区域中使用DateTime.
对适配器的引用如下:
@XmlAttribute(name = "start")
@XmlJavaTypeAdapter(DateTimeAdapter.class)
private DateTime range;
解决方法:
您可以利用XmlAdapter.您的XmlAdapter负责将您的DateTime实例转换为字符串.
public class DateTimeAdapter extends XmlAdapter<String, DateTime> {
...
}
然后,您可以在DateTime类型的属性上使用@XmlJavaTypeAdapter批注引用XmlAdapter.
@XmlJavaTypeAdapter(DateTimeAdapter.class)
public DateTime getFoo() {
return foo;
}
内容总结
以上是互联网集市为您收集整理的Java-JAXB拆分单个属性并绑定到多个字段全部内容,希望文章能够帮你解决Java-JAXB拆分单个属性并绑定到多个字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。