java同时更改多个字段_Java-JAXB拆分单个属性并绑定到多个字段

有没有一种方法可以使用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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值