Mixinアノテーションを使用して、POJOとBasicDBObject
にアノテーションを付けることができます。 (またはDBObject
)、したがって、注釈は問題ではありません。 BasicDBOject
以降 はマップです。@JsonAnySetter
を使用できます putメソッドについて。
m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
MongoDB Objectの経験がまったくないので、これが私が思いつくことができるすべてです。
更新: MixIn 基本的には、クラスを変更せずにクラスにアノテーションを追加するJacksonメカニズムです。これは、マーシャリングするクラスを制御できない場合(外部のjarからのものなど)、またはクラスをアノテーションで乱雑にしたくない場合に最適です。
ここでのあなたのケースでは、BasicDBObject
Map
を実装します そのため、クラスのメソッドはput
になります。 、マップインターフェイスで定義されているとおり。 @JsonAnySetter<を追加する/ a> そのメソッドに対して、クラスのイントロスペクション後に知らないプロパティを見つけた場合は常に、メソッドを使用してプロパティをオブジェクトに挿入するようにジャクソンに指示します。キーはプロパティの名前であり、値はプロパティの値です。
JacksonはBasicDBOject
に直接変換するため、これらすべてを組み合わせると、中間マップがなくなります。 そのクラスをJsonから逆シリアル化する方法を知っているからです。この構成では、次のことができます。
DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
私はMongoDBを使用していないため、これをテストしていないことに注意してください。そのため、いくつかの問題が発生する可能性があります。ただし、同様のユースケースで同じメカニズムを問題なく使用しました。クラスに応じてYMMV。