MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Pemetaan POJO yang efisien ke/dari Java Mongo DBObject menggunakan Jackson

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Referensi Dokumen Lain dengan String daripada ObjectId

  2. MongoDB:Cara menemukan dokumen dengan id di dalam dokumen bersarang

  3. Hasil Perulangan dengan Panggilan API Eksternal dan findOneAndUpdate

  4. MongoDB $lantai

  5. Bagaimana cara memperbaiki masalah pemetaan Morphia ini??? ---> PERINGATAN [org.mongodb.morphia.mapping.DefaultCreator] - Kelas tidak ditemukan didefinisikan dalam dbObj: