有没有一种方法可以使用JAXB将单个属性解组/拆分为多个字段?
我在具有时间属性的XML文件中有一个元素(无法更改XML文件).时间属性的精度为微秒.因此,我无法将属性存储在java Date或Joda DateTime字段中.
我想将属性存储在一个简单的自定义DateTime类中,其中亚秒级存储在Integer中,其余时间存储在Java Date中(我无法访问Joda).但是,我一直无法弄清楚如何将单个属性解组为Date和Integer.
XML范例:
简单的自定义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 {
@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;