泽西岛 + 杰克逊 JSON 日期格式序列化 - 如何更改格式或使用自定义杰克逊JsonProvider
我正在使用 Jersey + Jackson 为我的应用程序提供 REST JSON 服务层。我遇到的问题是默认的日期序列化格式如下所示:
"CreationDate":1292236718456
起初我以为这是一个UNIX时间戳...但这太长了。我的客户端JS库在反序列化这种格式时遇到了问题(它支持一堆不同的日期格式,但我认为不支持这种格式)。我想更改格式,以便我的库可以使用它(例如ISO)。我该怎么做...我发现了一段可以提供帮助的代码,但是...我把它放在哪里,因为我不控制杰克逊序列化程序实例化(泽西岛)?
objectMapper.configure(
SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
我还找到了这个自定义代码 - 问题是..如何使我所有的POJO类都使用它?JacksonJsonProvider
@Provider
public class MessageBodyWriterJSON extends JacksonJsonProvider {
private static final String DF = "yyyy-MM-dd’T'HH:mm:ss.SSSZ";
@Override
public boolean isWriteable(Class arg0, Type arg1, Annotation[] arg2,
MediaType arg3) {
return super.isWriteable(arg0, arg1, arg2,
arg3);
}
@Override
public void writeTo(Object target, Class arg1, Type arg2, Annotation[] arg3,
MediaType arg4, MultivaluedMap arg5, OutputStream outputStream)
throws IOException, WebApplicationException {
SimpleDateFormat sdf=new SimpleDateFormat(DF);
ObjectMapper om = new ObjectMapper();
om.getDeserializationConfig().setDateFormat(sdf);
om.getSerializationConfig().setDateFormat(sdf);
try {
om.writeValue(outputStream, target);
} catch (JsonGenerationException e) {
throw e;
} catch (JsonMappingException e) {
throw e;
} catch (IOException e) {
throw e;
}
}
}