आप शायद अपने POJO और BasicDBObject
को एनोटेट करने के लिए मिक्सिन एनोटेशन का उपयोग कर सकते हैं (या DBObject
), इसलिए एनोटेशन कोई समस्या नहीं है। चूंकि BasicDBOject
एक नक्शा है, आप उपयोग कर सकते हैं @JsonAnySetter
पुट विधि पर।
m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
मोंगोडीबी ऑब्जेक्ट के साथ मेरे पास शून्य अनुभव होने के बाद से मैं बस इतना ही आ सकता हूं।
अपडेट करें: मिक्सइन मूल रूप से उक्त वर्ग को संशोधित किए बिना कक्षा में एनोटेशन जोड़ने के लिए जैक्सन तंत्र हैं। जब आप जिस वर्ग को मार्शल करना चाहते हैं उस पर आपका नियंत्रण नहीं होने पर यह एकदम सही फिट है (जैसे कि जब यह किसी बाहरी जार से हो) या जब आप एनोटेशन के साथ अपनी कक्षाओं को अव्यवस्थित नहीं करना चाहते।
यहां आपके मामले में, आपने कहा था कि BasicDBObject
Map
को लागू करता है इंटरफ़ेस, ताकि कक्षा में विधि हो put
, जैसा कि मानचित्र इंटरफ़ेस द्वारा परिभाषित किया गया है। @JsonAnySetter<जोड़कर /ए> उस विधि के लिए, आप जैक्सन को बताते हैं कि जब भी उसे कोई ऐसी संपत्ति मिलती है जिसे वह नहीं जानता है, तो वह वस्तु में संपत्ति डालने के लिए विधि का उपयोग करने के लिए कक्षा के आत्मनिरीक्षण के बाद नहीं जानता है। कुंजी संपत्ति का नाम है और मूल्य, संपत्ति का मूल्य है।
यह सब संयुक्त मध्यवर्ती मानचित्र को दूर कर देता है, क्योंकि जैक्सन सीधे BasicDBOject
में परिवर्तित हो जाएगा क्योंकि अब यह जानता है कि उस वर्ग को जेसन से कैसे deserialize करना है। उस कॉन्फ़िगरेशन के साथ, आप यह कर सकते हैं:
DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
ध्यान दें कि मैंने इसका परीक्षण नहीं किया है क्योंकि मैं मोंगोडीबी के साथ काम नहीं करता, इसलिए कुछ ढीले सिरे हो सकते हैं। हालांकि, मैंने बिना किसी समस्या के समान उपयोग के मामलों के लिए समान तंत्र का उपयोग किया है। वाईएमएमवी कक्षाओं पर निर्भर करता है।