将JSON REST Web服务中的日期序列化为ISO-8601字符串

Zli*_*ika 19 json jax-rs resteasy jboss7.x

我有一个使用JBoss AS 7.1的JAX-RS应用程序,以及包含Dates(java.util.Date)的POST/GET JSON和XML对象:

@XmlRootElement
@XmlAccessorType(XmlAccessField.FIELD)
public class MyObject implements Serializable
{
    @XmlSchemaType(name = "dateTime")
    private Date date;
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我在get方法上使用@Produce("application/xml")时,objets被序列化为XML并且日期被转换为ISO-8601字符串(例如"2012-12-10T14:50:12.123 + 02:00") ).

但是,如果我在get方法上使用@Produce("application/json"),则JSON对象中的日期是时间戳(例如"1355147452530")而不是ISO-8601字符串.

如何配置JAX-RS实现(RESTEasy)以JSON格式将日期序列化为ISO-8601字符串而不是时间戳?

谢谢您的回答.

注意:我还尝试使用自定义JAX-RS提供程序为日期执行JSON序列化

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class CustomJsonDateProvider implements MessageBodyWriter<Date>
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这个提供程序似乎是由RESTeasy在JBoss初创公司注册的:

[org.jboss.jaxrs] Adding JAX-RS provider classes: package.CustomJsonDateProvider
...
[org.jboss.resteasy.cdi.CdiInjectorFactory] No CDI beans found for class package.CustomJsonDateProvider. Using default ConstructorInjector.
Run Code Online (Sandbox Code Playgroud)

但它永远不会被使用!

小智 11

我假设您的json解析器是Jackson,请尝试:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd,HH:00", timezone="CET")
public Date date;
Run Code Online (Sandbox Code Playgroud)

(自杰克逊2.0以来)