2012-08-06 14 views
5

मेरे पास एक ऑब्जेक्ट है जो मैं अपने कार्यक्रम के एक हिस्से में एक विशेषता के साथ क्रमबद्ध करना चाहता हूं, लेकिन बिना किसी अलग हिस्से में। मेरे पास ऑब्जेक्टमैपर भी है जिसे व्यापक रूप से अनुकूलित किया गया है जिसे मैं दोनों क्रमिकरणों के लिए उपयोग करता हूं। मेरा पहला झुकाव एक मिक्सिन का उपयोग ट्विक करने के लिए किया गया था यदि विशेषता दिखाई दे, लेकिन ऐसा लगता है कि आप केवल ऑब्जेक्टमैपर पर रख सकते हैं, न कि ऑब्जेक्टमैपर द्वारा लौटाए गए पाठक पर। असल में कोड जो मैं लिखने में सक्षम होना चाहता हूं वह निम्न जैसा दिखता है।मैं एक पाठक को जैक्सन मिश्रण कैसे जोड़ूं, ऑब्जेक्टमैपर के लिए नहीं?

ObjectMapper myMapper = new ObjectMapper(); // in reality there is a lot of customization 
Foo foo = myMapper.reader().withMixin(Foo.class, FooMixin.class).readValue(jsonParser, Foo.class); 

उत्तर

5

सही। आप मिक्स-इन-द-फ्लाई को नहीं बदल सकते हैं, हालांकि: चूंकि उनका उपयोग (डी) धारावाहिकों के आत्मनिरीक्षण के लिए किया जाता है, और परिणाम (वास्तविक (डी) धारावाहिक) कैश किए जाते हैं, उन्हें प्रारंभिक कॉन्फ़िगरेशन के हिस्से के रूप में जोड़ा जाना चाहिए। यही कारण है कि न तो ObjectReader और न ही ObjectWriter मिश्रण-इन्स बदलने के तरीकों का खुलासा करता है: वे केवल उन चीज़ों को बदलने की अनुमति देते हैं जिन्हें प्रति-कॉल आधार पर गतिशील रूप से बदला जा सकता है।

लेकिन शायद मिश्रण-इन ऐसा करने का सबसे अच्छा तरीका नहीं है: क्या आपने इसके बजाय JSON Views का उपयोग करने पर विचार किया है? प्रत्येक (डी) धारावाहिकरण के लिए उपयोग में सक्रिय दृश्य अलग से बदला जा सकता है।

3

असल में, आप क्रमबद्धता या अक्रमांकन (या निश्चित रूप से दोनों) के लिए mixins कॉन्फ़िगर कर सकते हैं:

objectMapper.getSerializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); 
objectMapper.getDeserializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); 

http://wiki.fasterxml.com/JacksonMixInAnnotations