天天看点

XStream、JAXB 日期(Date)、数字(Number)格式化输出xml

XStream、Jaxb是java中用于对象xml序列化/反序列化 的经典开源项目,利用它们将对象转换成xml时,经常会遇到日期(Date)、数字按指定格式输出的需求,下面是使用示例:

一、日期字段格式化输出

1.1 xStream

xStream默认使用UTC时间格式输出,上面的代码演示了如何按北京时间输出 yyyy-MM-dd HH:mm:ss 格式

1.2 jaxb

jaxb处理这个要麻烦一点,先要创建一个Adapter,下面是示例

然后要处理的dto类,相应的Date字段的get方法上使用刚才这个Adapter

注:不要在private上使用,最好将注解打在get方法上,否则有可能报错。

这里,再给一个List<T>类型的常见用法:

@XmlElementWrapper(name="details")

@XmlElement(name="detail")

public List<FSUDetail> getDetails() {

    return details;

}

如果没有这二个注解,xml的结果类似:

<root>

...

    <details>...</details>

</root>

加上这二个注释后,xml的结果类似:

    <details>

        <detail>...</detail>

    </details>    

二、数字格式化

假设我们要将一个Double型的成员,按中国货币的格式输出

2.1 xStream

默认的DoubleConverter满足不了要求,得从它派生一个子类来重写toString(Object obj)方法

然后这样使用:

2.2 Jaxb

仍然是按Adapter的老路,定义一个专用的Adapter

然后在相关的Double字段的get方法上,用注解使用这个Adapter

最后附一个完整的示例:

为演示效果,先定义一个Dto类:

同时为了使用jaxb更方便,定义一个JaxbUtil辅助类

完整的单元测试如下:

测试结果如下:

==> jaxb ==>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<sample>

<amount>¥1,234.57</amount>

<createDate>2014-10-31 00:00:00</createDate>

</sample>

==> xstream ==>