2012-01-25 5 views
1

私は@JSonAnySetterメソッドを使用して未知のパラメータをすべてマップに格納する、ジャックソンのbeanを持っています。jacksonはカスタムゲッター/セッターでマップをどのようにシリアル化しますか?

@JSonAnySetter 
handleUnkowns(String k, Object v) 
{ 
    myMap.put(k,v); 
} 

データが欠落している場合、未知パラメータが移入され、データが失われることはありません....いうよりジャクソンがクラッシュするように私は、私のすべてのデータ型の「ベース豆」としてこれを使用しています。

しかし、私はこれらの未知数のネストされていないシリアル化された形をしたい - すなわち、 - 私はシリアル化されたパラメータが、オブジェクトがシリアル化されるとき、オブジェクトのトップレベルにしたい。私は地図から延びていることから、ジャクソンのカスタムマップのシリアル化が行われ、unknownParametersは「フィールド」になります - 上記の場合であること

//I want this map to be serialized/deserialized : {"collarWidth":10 "name":"fido"} 
class Dog extens JSonBean 
{ 
    int collarWidth=0; 
    getCollarWidth(){return collarWidth;} 
    setCollarWidth(int x){collarWidth=x;} 
} 

注:また、私は、カスタムフィールドもシリアライズしたいです私のjsonで。

したがって予想JSONシリアライズが
{ "collarWidth":10 "unknownParameters":{ "名前": "FIDO"}}となり

なく

{ "collarWidth":10 " Java beanシリアライザが入力文字列と同じネストを保持するように、未知のパラメータを既知のものと「マージする」最も簡単な方法は何ですか?

明白な解決策は、シリアル化されたマップで「MYMAP」オブジェクトからパラメータをマージすることであるが、それはやり過ぎのように思える、と私は、この問題はよりエレガントな解決策を持っている可能性があることを前提としています。

+0

「私はそれを理解しました。ここを「ol e-diary」に入れてください:http://jayunit100.blogspot.com/2012/01/lossless-json-reflection.html – jayunit100

+0

...まあ..私の解決策は少し控えめです。おそらく、カスタムシリアライザを使用して手動でマップを編集するほうがよいでしょう。その静脈内の答えはとても役に立ちます。 – jayunit100

答えて

1

@JsonAnyGetter注釈を確認しましたか?そのメソッドの戻り値はアンラップされ、@JsonAnySetterと動作するようになります。 This blog entryは使用方法を説明しています。