पर एक कस्टम तरह से की कल्पना मैं निम्नलिखित POJO करते हैं:(De-) को क्रमानुसार बीन क्रम
class Pojo {
String s;
Object o;
Map<String, String> m;
}
और रनटाइम पर, मैं एक को छोड़कर सभी गुण के लिए डिफ़ॉल्ट क्रमांकन/deserialization चाहते हैं। आम तौर पर, मैं this other question के समान क्रमबद्ध होने पर डेटाबेस में अपनी आईडी द्वारा किसी डेटाबेस को प्रतिस्थापित करना चाहता हूं।
उदाहरण के लिए, मैं एक स्ट्रिंग एक बाहरी मानचित्रण से प्राप्त द्वारा o
को बदलने के लिए (उदाहरण के लिए: object1
< => "123" और object2
< => "456"): चाहते
- क्रमबद्धता: पढ़ा
o
और की जगह (इसलिए यदिo
object1
है, स्ट्रिंग "123" के रूप में क्रमानुसार) - अक्रमांकन: "123", पढ़ने के कुछ तालिका क्वेरी
o
के मूल मूल्य वापस पाने के लिए (यानीobject1
), एकPojo
ओर्ब पुन:o = object1
के साथ टी।
मैं समझता हूं कि मॉड्यूल ऐसा करने का एक तरीका होगा, लेकिन मुझे यह सुनिश्चित नहीं है कि स्वचालित बीनसेरियलाइज़र/Deserializer को उन गुणों के लिए कैसे उपयोग किया जाए जिन्हें बदलने की आवश्यकता नहीं है।
क्या कोई कोई उदाहरण (यहां तक कि प्रदूषित) या वैकल्पिक दृष्टिकोण दे सकता है?
नोट्स:
- मैं एनोटेशन या mixins उपयोग नहीं कर सकते के रूप में परिवर्तन संकलन समय पर अज्ञात हों (जैसे कि किसी भी गुण एक तरीका है कि निर्धारण नहीं है में बदला जा सकता है)।
- This other question एक कस्टमसेरियलाइज़र फैक्टरी का उपयोग करने के लिए अंक, जो नौकरी करने लगता है। दुर्भाग्यवश, आधिकारिक साइट इंगित करती है कि it is not the recommended approach any more और इसके बजाय मॉड्यूल का उपयोग किया जाना चाहिए।
संपादित
एक छोटे से स्पष्ट होने के लिए, मैं उदाहरण के लिए mixins साथ निम्न कर सकते हैं:
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;
}
और फिर जोड़ें जेएसओएन सामग्री के लिए आवश्यक स्ट्रिंग। लेकिन मुझे संकलन समय पर जानना होगा कि यह o
फ़ील्ड है जिसे प्रतिस्थापित करने की आवश्यकता है, जो मैं नहीं करता हूं।
> मैं एनोटेशन या mixins उपयोग नहीं कर सकते के रूप में परिवर्तन संकलन समय पर अज्ञात हैं (यानी किसी भी गुण हो> एक तरह से बदल सकता है (मैं jakson-नक्शाकार-ASL-1.9.8 का इस्तेमाल किया है) यह निर्धारित नहीं है)। क्या आप स्पष्टीकरण दे सकते हैं? बहुत उलझन में, क्योंकि उपरोक्त सब कुछ "नोट्स:" शीर्षक स्थिर है और संकलन समय पर जाना जाता है। क्या कक्षाएं (पोजो) और पोजो के क्षेत्र अग्रिम में ज्ञात नहीं हैं? –
क्या आप सुझाव दे रहे हैं कि किसी भी वर्ग संरचना को मानना सुरक्षित नहीं है? कच्चे (untyped/simple) डेटा बाइंडिंग deserialises ऑब्जेक्ट JSON संरचना LinkedHashMap <स्ट्रिंग, ऑब्जेक्ट>, और सरणी JSON संरचना के रूप में ArrayList
@GlenBest हां पोजो वर्ग कम या ज्यादा कुछ भी हो सकता है। मैंने एक उदाहरण दिया जहां 'ओ' को स्ट्रिंग द्वारा प्रतिस्थापित किया गया है। लेकिन बाद में कार्यक्रम में, यह 'एम' हो सकता है जिसे कुछ स्ट्रिंग और 'ओ' क्रमबद्ध "सामान्य" द्वारा प्रतिस्थापित किया जाना चाहिए। – assylias