でカスタムの方法での私は、次のPOJOを持っている想像してみましょう: (縮小)シリアル化ビーンは、実行時
class Pojo {
String s;
Object o;
Map<String, String> m;
}
実行時に
は、私は1つを除くすべてのプロパティのデフォルトのシリアライズ/デシリアライズします。通常、私は、フィールドの代わりに、フィールドのIDをデータベースで、シリアル化するときは、 this other questionと同様です。例えば、私は(例:object1
< => "123" とobject2
< => "456"):外部マッピングから取得した文字列でo
を交換したい
- 連載:読み取り
o
と(o
がobject1
であればそう、文字列「123」としてシリアライズ) - デシリアライゼーションの置き換え:
Pojo
OBJECを再作成、バックo
(すなわちobject1
)の元の値を取得するには、いくつかのテーブルを照会し、「123」をお読みにtはo = object1
です。
私はモジュールはそれを行うための一つの方法であろうと理解が、私は変更する必要はありませんプロパティの自動のBeanSerializer /デシリアライザを維持しながら、それらを使用するかどうかはわかりません。
誰かが例を挙げることはできますか(工夫されていることもあります)
注
- 変化(すなわち、任意の特性が決定ではない方法で変更される可能性があります)コンパイル時に知られていないように私は、注釈またはミックスインを使用することはできません。
- This other questionは、CustomSerializerFactoryを使用していることを示しています。残念ながら、公式サイトにはit is not the recommended approach any moreとそのモジュールが代わりに使用されるべきであることが示されています。
編集
少し明確であるために、私は、例えばミックスインで、次の操作を行うことができます
ObjectMapper mapper = new ObjectMapper(MongoBsonFactory.createFactory());
mapper.addMixInAnnotations(Pojo.class, PojoMixIn.class);
ObjectReader reader = mapper.reader(Pojo.class);
DBEncoder dbEncoder = DefaultDBEncoder.FACTORY.create();
OutputBuffer buffer = new BasicOutputBuffer();
dbEncoder.writeObject(buffer, o);
次のmixinで:
abstract class PojoMixIn {
@JsonIgnore Object o;
}
それから、 JSONコンテンツに必要な文字列。しかし、私はコンパイル時にo
フィールドを置き換える必要があることを知る必要があります。
(私はjaksonマッパー-ASL-1.9.8を使用している)>変更は、コンパイル時に不明であると私は注釈やミックスインを使用することはできません(つまり、すべてのプロパティが>方法で変更される可能性がありますそれは決定できません)。明確にしてください。非常に混乱しています。なぜなら、 "Notes:"の上にあるものは全て静的であり、コンパイル時に知られているからです。クラス(Pojo)とPojoのフィールドは事前に分かっていませんか? –
クラス構造を想定するのは安全ではないとお考えですか? Raw(untyped/simple)データバインディングは、JSON構造体をLinkedHashMap、配列JSON構造体としてArrayList
@GlenBestはいPojoクラスは多かれ少なかれ可能性があります。私は 'o'がStringに置き換えられた例を挙げました。しかし、プログラムの後半では、文字列で置き換えられる必要がある 'm'があり、' o'は「通常」シリアル化されます。 – assylias