2012-10-09 9 views
10

मैं पार्स करने के लिए JSON डेटा मेरी नियंत्रक स्प्रिंग जैक्सन समर्थन का निर्माण का उपयोग करने में यूआई से भेजा जा रहा कोशिश कर रहा हूँ और यह मेरा कोड हैJsonMappingException कोई एकल स्ट्रिंग निर्माता/कारखाने विधि जैक्सन

final Map<String, CartDataHelper> entriesToUpdateMap = new ObjectMapper().readValue(entriesToUpdate, new TypeReference<Map<String, CartDataHelper>>() 

मेरी JSON स्ट्रिंग

है
{"0":"{\"categoryCode\":\"shoes\",\"productCode\":\"300050253\",\"initialQty\":\"3\",\"leftoverQty\":\"0\",\"newQty\":\"3\"}", 
"1":"{\"categoryCode\":\"shoes\",\"productCode\":\"300050254\",\"initialQty\":\"3\",\"leftoverQty\":\"0\",\"newQty\":\"3\"}"} 

मैं कुछ ऑनलाइन सेवाओं का उपयोग कर JSON प्रारूप की जाँच की और यह मान्य लगता है, जबकि JSON डेटा पार्स कोशिश कर जीटीओ मैं निम्नलिखित अपवाद हो रही है

org.codehaus.jackson.map.JsonMappingException: Can not instantiate value of type [simple type, class controllers.util.CartDataHelper] from JSON String; no single-String constructor/factory method 

मेरी CartDataHelper वर्ग productCode के लिए, categoryCode आदि एक नहीं तर्क निर्माता

+2

वह JSON डेटा ऐसा लगता है कि यह डबल-एस्केप किया गया है। इसलिए जब यह मान्य हो सकता है, मुझे नहीं लगता कि यह आपके द्वारा किए जाने वाले कार्यों का प्रतिनिधित्व करता है। यह दो गुणों ("0", और "1") वाले ऑब्जेक्ट का प्रतिनिधित्व करता है, प्रत्येक एक मान के साथ जो एक स्ट्रिंग के रूप में प्रतिनिधित्व JSON एन्कोडेड ऑब्जेक्ट की तरह दिखता है। – Ramon

+0

@ रैमन: इस से मिलने के लिए संरचना को बदलने का कोई तरीका है? –

+0

यह उस उत्पाद पर निर्भर करता है जो इसे उत्पन्न करता है, मुझे लगता है। – Ramon

उत्तर

6

टिप्पणियां उल्लेख किया है के साथ, अपने JSON शामिल Map<String,String> और नहीं Map<String,CartDataHelper> के लिए सरल गुण शामिल हैं: मान JSON तार, नहीं JSON वस्तुओं रहे हैं।

आदर्श रूप से आप जेएसओएन स्ट्रिंग्स के रूप में ऑब्जेक्ट्स लिखने की कोशिश नहीं करेंगे; और यदि हां, तो चीजें काम करेगी।

0

ऐसा लगता है कि क्लाइंट पक्ष पर जेसन को ऑब्जेक्ट के बजाय स्ट्रिंग के रूप में भेजा जाता है। इस तरह सर्वर पक्ष पर आप एक स्ट्रिंग प्राप्त कर रहे हैं, न कि कार्टडाटाहेल्पर जैसा कि आप नाटक करते हैं।

JSON.parse(stringCartDataHelper) भेजने का प्रयास करें। यह मेरे लिए एक ही मुद्दे के साथ काम किया।

संबंधित मुद्दे