मुझे जैक्सन में अपने कस्टम डिसेरिएलाइज़र में समस्या है। मैं डिफॉल्ट धारावाहिक को एक्सेस करना चाहता हूं ताकि मैं जिस ऑब्जेक्ट को डिस्क्राइबलाइज कर रहा हूं, उसे पॉप्युलेट कर सके। आबादी के बाद मैं कुछ कस्टम चीजें करूंगा लेकिन पहले मैं डिफ़ॉल्ट जैक्सन व्यवहार के साथ वस्तु को अलग करना चाहता हूं।
यह वह कोड है जो मेरे पास इस समय है।
public class UserEventDeserializer extends StdDeserializer<User> {
private static final long serialVersionUID = 7923585097068641765L;
public UserEventDeserializer() {
super(User.class);
}
@Override
@Transactional
public User deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
User deserializedUser = null;
deserializedUser = super.deserialize(jp, ctxt, new User());
// The previous line generates an exception java.lang.UnsupportedOperationException
// Because there is no implementation of the deserializer.
// I want a way to access the default spring deserializer for my User class.
// How can I do that?
//Special logic
return deserializedUser;
}
}
मुझे डिफ़ॉल्ट डिसेरिएलाइज़र को इनिशियलाइज़ करने का एक तरीका है, ताकि मैं अपना विशेष तर्क शुरू करने से पहले अपने POJO को पहले से आबाद कर सकूँ।
कस्टम deserializer के भीतर से deserialize कॉल करते समय ऐसा लगता है कि विधि को वर्तमान संदर्भ से बुलाया जाता है, इससे कोई फर्क नहीं पड़ता कि मैं धारावाहिक वर्ग का निर्माण कैसे करता हूं। मेरे POJO में एनोटेशन के कारण। यह स्पष्ट कारणों के लिए एक स्टैक ओवरफ्लो अपवाद का कारण बनता है।
मैंने शुरू में कोशिश की है BeanDeserializer
लेकिन प्रक्रिया बेहद जटिल है और मैं इसे करने का सही तरीका खोजने में कामयाब नहीं हुआ हूं। मैंने भी AnnotationIntrospector
बिना किसी लाभ के ओवरलोडिंग की कोशिश की , यह सोचकर कि इससे मुझे एनोटेशन को अनदेखा करने में मदद मिल सकती है DeserializerContext
। अंत में यह सीम मैं कुछ सफलता का उपयोग कर लिया है, JsonDeserializerBuilders
हालांकि यह मुझे वसंत से आवेदन के संदर्भ में पकड़ पाने के लिए कुछ जादू सामान करने के लिए आवश्यक हो सकता है। मैं किसी भी चीज की सराहना करता हूं जो मुझे उदाहरण के लिए एक क्लीनर समाधान तक ले जा सकता है मैं JsonDeserializer
एनोटेशन को पढ़े बिना एक डीरिएराइजेशन संदर्भ कैसे बना सकता हूं ।
DeserializationContext
कुछ ऐसा नहीं है जिसे आपको या तो बनाना चाहिए या बदलना चाहिए; यह द्वारा प्रदान किया जाएगाObjectMapper
।AnnotationIntrospector
इसी तरह, पहुँच प्राप्त करने में मदद नहीं करेगा।