2012-01-16 39 views
2

我需要使用傑克遜對任意對象進行編組和解組,並且我需要某種日期格式。在Jackson中使用自定義編組器沒有註釋?

現在,我有這樣的:

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

創建一個模塊,併爲每種類型添加序列化程序。

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)