我需要使用Jackson在任意对象上编组和解组json,我需要一定的日期格式。
现在,我有这个:
final ObjectMapper mapper = new ObjectMapper()
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true)
当我运行mapper.writeValueAsString([a:new Date()])
时,我会得到一个时间戳。我以前的编组解决方案使用了这个:
ISODateTimeFormat.dateTime().withZoneUTC().print(it.getTime())
但我似乎只能找到一种方法来设置杰克逊的特定编组器注释。我有多个类,我需要特别编组,其中没有一个可以注释。有没有办法按类设置封送程序?
答案 0 :(得分:2)
创建一个模块,并为每种类型添加序列化器。
class ApiDateSerializer extends JsonSerializer<Date> {
void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) {
String dateString = ISODateTimeFormat.dateTime().withZoneUTC().print(date.getTime())
jsonGenerator.writeString(dateString);
}
}
...
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true)
Module queryModule = new SimpleModule("QueryModule", new Version(1, 0, 0, null))
queryModule.addSerializer(Date.class, new ApiDateSerializer());
mapper.registerModule(queryModule)