यह कोई डुप्लिकेट सवाल यह है कि क्योंकि निम्न प्रश्नों या तो गंदा कर रहे हैं या वे बिल्कुल नहीं दिए गए हैं:क्या जैक्सन वास्तव में जेसन को जेनेरिक प्रकार में deserialize करने में असमर्थ है?
deserializing-a-generic-type-with-jackson
jackson-deserialize-into-runtime-specified-class
jackson-deserialize-using-generic-class
jackson-deserialize-generic-class-variable
मैं इस आशा है कि सवाल अंततः एक उत्तर मिलेगा जो इसे अच्छे के लिए स्पष्ट करता है।
एक मॉडल होने:
public class AgentResponse<T> {
private T result;
public AgentResponse(T result) {
this.result = result;
}
public T getResult() {
return result;
}
}
JSON इनपुट:
{"result":{"first-client-id":3,"test-mail-module":3,"third-client-id":3,"second-client-id":3}}
और दो की सिफारिश की सामान्य प्रकार deserializing के तरीके:
mapper.readValue(out, new TypeReference<AgentResponse<Map<String, Integer>>>() {});
या
JavaType javaType = mapper.getTypeFactory().constructParametricType(AgentResponse.class, Map.class);
mapper.readValue(out, javaType);
जैक्सन जेनेरिक टाइप टी से निपटने में कभी भी सक्षम नहीं है, यह आंकड़े जावाटाइप से एक मानचित्र है, लेकिन यह टाइप एरर के कारण ऑब्जेक्ट टाइप कन्स्ट्रक्टर तर्क पाता है और एक त्रुटि फेंकता है। तो क्या यह जैक्सन बग है, या क्या मैं कुछ गलत कर रहा हूं? TypeReference या JavaType के स्पष्ट विनिर्देश क्या है?
com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.fg.mail.smtp.AgentResponse<java.util.Map<java.lang.String,java.lang.Integer>>]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: [email protected]; line: 1, column: 2]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:984)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:276)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2064)
आपको जैक्सन-उपयोगकर्ता मेलिंग सूची – fge
पर उस प्रश्न को पोस्ट करना चाहिए, साथ ही, क्या आप सचमुच कोशिश करते हैं और deserialize _all_ कि JSON या सिर्फ यह JSON का 'परिणाम' सदस्य मान है? – fge
मैं जेएसओएन इनपुट को एजेंट रेस्पॉन्स में deserializing कर रहा हूँ। मुझे नहीं पता कि मैं इसे आंशिक रूप से कैसे और क्यों निराश करूंगा। यह स्थिति और परिणाम मूल्य के साथ सिर्फ एक प्रतिक्रिया है, जो ऑब्जेक्ट, संग्रह, मानचित्र इत्यादि हो सकता है। मैंने प्रश्न को संशोधित किया है, इसलिए केवल सामान्य परिणाम है, – lisak