jaxb XML编组需要以不同方式格式化日期

时间:2016-01-18 10:03:21

标签: java xml jaxb jax-rs

我们要求在从jax-rs webservice返回的XML期间以不同方式格式化日期字段。

离。

Class Dates {
    Date date1; //in xml this date must be in format dd-mon-yyyy
    Date date2; // in xml this date must be in format dd-mm-yyyy hh:ss sss
} 

我们尝试过XMLAdapter,但我们无法确定它是否适用于字段date1或date2

请指教。如果有任何其他过滤器或事件我可以使用

3 个答案:

答案 0 :(得分:1)

您可以在日期中使用不同的xsd类型。 第一次使用

<xs:element name="mySimpleDate" type="xs:date"/>

第二次使用

<xs:element name="myDatetime" type="xs:dateTime"/>

在你的xsd。

答案 1 :(得分:1)

  

我们尝试过XMLAdapter,但我们无法确定它是否适用于字段   date1或date2

XmlAdapter是正确的方法,您只需要为每种格式提供一种格式。

@XmlAccessorType(XmlAccessType.FIELD)
class Dates {
    @XmlJavaTypeAdapter(MyDateAdapter.class)
    Date date1; //in xml this date must be in format dd-mon-yyyy

    @XmlJavaTypeAdapter(MyDateTimeAdapter.class)
    Date date2; // in xml this date must be in format dd-mm-yyyy hh:ss sss
} 

如果要从XML架构生成这些类,请参阅下面链接的答案:

答案 2 :(得分:0)

您可以像创建一个包装器一样创建一个扩展java.util.Date的新类:

public class CustomDate extends Date {

    public CustomDate() {
        super();
    } 

} 

date2声明为CustomDate,这样您就可以正确解析两个日期。

否则将date2声明为Timestamp对象,并为这两种类型创建两个不同的适配器。

Date对象开始构建它:

Date d2 = new Date();
Timestamp t2 = new Timestamp(d2.getTime());