我正在使用 Jersey + Jackson 为我的应用程序提供 REST JSON 服务层。我遇到的问题是默认的日期序列化格式如下所示:
"CreationDate":1292236718456
起初我以为它是一个 UNIX 时间戳……但它太长了。我的客户端 JS 库在反序列化这种格式时遇到问题(它支持一堆不同的日期格式,但我想不支持这种格式)。我想更改格式,以便我的库可以使用它(例如 ISO)。我该怎么做......我找到了一段可以提供帮助的代码,但是......我应该把它放在哪里,因为我不控制 Jackson 序列化程序实例化(Jersey 可以)?
objectMapper.configure(
SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
我还发现了这个自定义代码JacksonJsonProvider
- 问题是..我如何让我所有的 POJO 类都使用它?
@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;
}
}
}