为了账号安全,请及时绑定邮箱和手机立即绑定

jaxb定制Date类型的序列化方式

标签:
Java

我们先看下面的demo代码,看下jaxb序列化Date类型的默认方式:

package cn.outofmemory.jaxb; import java.util.Date; import javax.xml.bind.JAXB; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; public class JAXB_DateDemo { private Date someDate; public Date getSomeDate() { return someDate; } public void setSomeDate(Date someDate) { this.someDate = someDate; } public static void main(String[] args) { JAXB_DateDemo demo = new JAXB_DateDemo(); demo.setSomeDate(new Date()); JAXB.marshal(demo, System.out); } }

运行上面代码,将输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JAXB_DateDemo>     <someDate>2014-05-12T18:12:22.272+08:00</someDate> </JAXB_DateDemo>

可以看到Date类型被序列化成了 2014-05-12T18:12:22.272+08:00  这对实际使用没有什么影响,但是对可读性不友好。

 我们可以选择我们想要的日期格式化方式,来让jaxb做序列化。我们需要添加一个XmlAdapter<String, Date>来实现Date类型的定制格式化和反序列化。

如下是JaxbDateAdapter的实现:

package cn.outofmemory.jaxb; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.xml.bind.annotation.adapters.XmlAdapter; public class JaxbDateAdapter  extends XmlAdapter<String, Date> { static final String STANDARM_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; @Override public Date unmarshal(String v) throws Exception { if (v == null) { return null; } DateFormat format = new SimpleDateFormat(STANDARM_DATE_FORMAT); return format.parse(v); } @Override public String marshal(Date v) throws Exception { DateFormat format = new SimpleDateFormat(STANDARM_DATE_FORMAT); return format.format(v); } }

在这个类中我们需要实现marshal和unmarshal方法,在这个方法中实现对Date类型的定制化格式化。

有了Adapter类,我们需要在Date属性上添加这个Adapter来告诉jaxb使用它。

 @XmlJavaTypeAdapter(JaxbDateAdapter.class)  public Date getSomeDate() { return someDate; }

在getSomeDate()属性上添加XmlJavaTypeAdapter注解,指定Adapter类,这样就可以在此属性的Date类型上应用Adapter了,我们可以再次运行程序看下输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JAXB_DateDemo>     <someDate>2014-05-12 18:18:28.833</someDate> </JAXB_DateDemo>

这次的输出是我们定制的Date格式了。

原文链接:http://outofmemory.cn/java/jaxb/jaxb-and-java.util.Date

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消