在没有注释的杰克逊中使用自定义编组器?

时间:2012-01-16 16:35:40

标签: json grails groovy marshalling jackson

我需要使用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())

但我似乎只能找到一种方法来设置杰克逊的特定编组器注释。我有多个类,我需要特别编组,其中没有一个可以注释。有没有办法按类设置封送程序?

1 个答案:

答案 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)