Anda mungkin dapat menggunakan anotasi Mixin untuk memberi anotasi pada POJO Anda dan BasicDBObject
(atau DBObject
), jadi anotasi tidak menjadi masalah. Sejak BasicDBOject
adalah peta, Anda dapat menggunakan @JsonAnySetter
pada metode put.
m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
Hanya ini yang bisa saya dapatkan karena saya tidak memiliki pengalaman sama sekali dengan Objek MongoDB.
Pembaruan: MixIn pada dasarnya adalah mekanisme Jackson untuk menambahkan anotasi ke kelas tanpa memodifikasi kelas tersebut. Ini sangat cocok saat Anda tidak memiliki kendali atas kelas yang ingin Anda kelola (seperti saat kelas tersebut berasal dari toples eksternal) atau saat Anda tidak ingin mengacaukan kelas Anda dengan anotasi.
Dalam kasus Anda di sini, Anda mengatakan bahwa BasicDBObject
mengimplementasikan Map
antarmuka, sehingga kelas memiliki metode put
, seperti yang didefinisikan oleh antarmuka peta. Dengan menambahkan @JsonAnySetter untuk metode itu, Anda memberi tahu Jackson bahwa setiap kali dia menemukan properti yang tidak dia ketahui setelah introspeksi kelas untuk menggunakan metode untuk memasukkan properti ke objek. Kuncinya adalah nama properti dan nilainya, ya, nilai properti.
Semua gabungan ini membuat peta perantara hilang, karena Jackson akan langsung mengonversi ke BasicDBOject
karena sekarang tahu cara deserialize kelas itu dari Json. Dengan konfigurasi tersebut, Anda dapat melakukan:
DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
Perhatikan bahwa saya belum menguji ini karena saya tidak bekerja dengan MongoDB, jadi mungkin ada beberapa jalan buntu. Namun, saya telah menggunakan mekanisme yang sama untuk kasus penggunaan serupa tanpa masalah. YMMV tergantung kelasnya.