2012-06-02 18 views
15

का उपयोग करते हुए @RequestBody सूची पर ऑब्जेक्ट्स का मानचित्र JSON सरणी मुझे जैक्सिक्स का उपयोग जावास्क्रिप्ट का उपयोग करने के लिए समस्याएं हैं जो हैश (टैग) के JSON सरणी पोस्ट किए गए हैं। जैक्सन


यहाँ नियंत्रक @RequestBody द्वारा प्राप्त डेटा है (यह सही json requestheader साथ भेज है):

@RequestMapping(value = "purchases/{purchaseId}/tags", method = RequestMethod.POST, params = "manyTags") 
@ResponseStatus(HttpStatus.CREATED) 
public void createAll(@PathVariable("purchaseId") final Long purchaseId, @RequestBody final List<Tag> entities) 
{ 
     Purchase purchase = purchaseService.getById(purchaseId); 

     Set<Tag> tags = purchase.getTags(); 
     purchaseService.updatePurchase(purchase); 
    } 

जब मैं डिबग:

[{name=tag1}, {name=tag2}, {name=tag3}] 


यहाँ नियंत्रक है और 'संस्थाओं' मान को देखें जो जेनेरिक ऑब्जेक्ट्स के ऐरेलिस्ट के रूप में दिखाता है, जैसा कि मैं अपेक्षा करता हूं 'टैग' प्रकार की वस्तुओं की सूची के रूप में नहीं।

मैं 'टैग' प्रकार के ऑब्जेक्ट्स की सूची में वस्तुओं की एक पारित सरणी को मानचित्रित करने के लिए जैक्सन कैसे प्राप्त कर सकता हूं?

धन्यवाद

+0

आप इसे इस प्रकार की कोशिश की? '[{" नाम "=" टैग 1 "}, {" नाम "=" टैग 2 "}, {" नाम "=" टैग 3 "}]' –

+0

मैंने उस शॉन की कोशिश नहीं की है, मैं एक का उपयोग करने के समाधान के साथ गया इसके बजाय @RequestBody के लिए सरणी। Http://stackoverflow.com/questions/4441557/rest-with-spring-and-jackson-full-data- बाइंडिंग –

उत्तर

39

ऐसा लगता है कि वसंत किसी कारण से पूर्ण प्रकार की जानकारी से गुजर रहा है, बल्कि एक प्रकार-मिट संस्करण है, जैसे कि घोषणा List<?> tag की तरह कुछ था लगता है। मैं नहीं पता है क्या पूरी तरह से इस को हल करने (स्प्रिंग एकीकरण टीम से कुछ आवश्यकता हो सकती है) किया जा सकता है, लेकिन एक काम के आसपास की तरह अपने खुद के प्रकार को परिभाषित करने के लिए है:

static class TagList extends ArrayList<Tag> { } 

इसके बजाय उसका उपयोग। यह सुपर-टाइप घोषणाओं के माध्यम से जेनेरिक पैरामीटरेशन बनाए रखेगा ताकि भले ही स्प्रिंग केवल TagList.class के समतुल्य हो, जैक्सन Tag पैरामीटर का पता लगा सकता है।

+0

चीयर्स StaxMan .... मैं निम्नलिखित लिंक पर आया जो इसके अलावा कई विकल्पों को साबित करता है आपका यहाँ एक http://stackoverflow.com/questions/4441557/rest-with-spring-and-jackson-full-data- बाइंडिंग –

+0

धन्यवाद StaxMan। मुझे एक ही समस्या का सामना करना पड़ रहा था। आपके जवाब ने मेरी मदद की। –

+0

यह इतना आसान और व्यावहारिक है, मैं इसे अपने एंड्रॉइड ऐप में उपयोग करता हूं। धन्यवाद – Gino

16

इस बल्कि एक सूची से एक सरणी प्राप्त करने के लिए है, इस प्रकार करने के लिए एक और तरीका है: तो आप बस एक जोड़ने की आवश्यकता होगी

@RequestBody Tag[] entities 
+0

ठीक है हाँ थॉमस टैग की एक सूची प्राप्त करना चाहता था, लेकिन यह देखकर कि यह काम नहीं करता है, मैंने सुझाव दिया है कि वह एक सरणी प्राप्त करे।मैं थोड़ी देर पहले इसी समस्या से जूझ रहा था, और फिलहाल सूची में वस्तुएं, जेनेरिक ऑब्जेक्ट नहीं बनाया जाएगा, शायद यह भविष्य में तय किया जाएगा, मुझे नहीं पता, इसलिए सूची प्राप्त करने के बजाय RequestBody के माध्यम से, किसी को प्रेषक पक्ष पर कुछ भी बदलने के बिना, उस विशिष्ट वस्तु की एक सरणी प्राप्त करनी चाहिए। – liloboy

0

जैक्सन, कस्टम वस्तुओं पर कोई पैरामीटर के साथ एक डिफ़ॉल्ट निर्माता की आवश्यकता है आपके Tag कक्षा में डिफ़ॉल्ट कन्स्ट्रक्टर।

आपके मामले में बस अपने Tag कक्षा में जोड़ें:

public Tag(){}