2012-01-16 9 views
2

任意のオブジェクトに対してjsonを整列化および非整列化するためにJacksonを使用する必要があります。特定の日付形式が必要です。私はmapper.writeValueAsString([a:new Date()])を実行すると、私はタイムスタンプを取得アノテーションなしでジャクソンにカスタムマーシャラーを使用していますか?

final ObjectMapper mapper = new ObjectMapper() 
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true) 
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true) 

は今のところ、私はこれを持っています。私の以前のマーシャリングソリューションは、この使用:

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) 
関連する問題