2012-02-02 7 views
5

मेरे पास स्प्रिंग 3.1.0.RELEASE का उपयोग कर स्प्रिंग रेस्ट सेवा है। यहाँ प्रश्न में सेवा कॉल के लिए प्रासंगिक कोड है:मेरी स्प्रिंग सेवा क्लाइंट द्वारा अनुरोध किए गए किसी भी सामग्री प्रकार को वापस क्यों कर रही है?

@RequestMapping(value="/{var1}", method=RequestMethod.GET, produces="application/json") 
@ResponseBody 
public String getSomeStuff(@PathVariable final String var1) { 
    return myJsonString; 
} 

यदि मैं यह निम्नलिखित कर्ल आदेश का उपयोग कर कहते हैं, यह खुशी से मुझे आवेदन की एक सामग्री प्रकार के साथ अपने json स्ट्रिंग रिटर्न/xml जबकि मैं एक उम्मीद होती है 406 वसंत के आधार पर 3.1 डॉक्स:

curl -v -H "Accept: application/xml" http://localhost:8080/MyServiceSite/myvalue 

इस सेवा (कोई क्रमबद्धता) के लिए मेरे एप्लिकेशन में कोई अतिरिक्त विन्यास है, मैं सेवा के लिए कॉन्फ़िगर करने के लिए कोई पोस्ट-प्रोसेसिंग के साथ कच्चे json लौट रहा हूँ। मुझे यकीन है कि मैंने कुछ याद किया है, क्या कोई भी कुछ भी बता सकता है जिसे मैं याद कर सकता हूं?

संपादित करें: यहां documentation है I यह काम करने का प्रयास करते समय देख रहा था। विशेष रूप से खंड 16.3.2.5। मेरा कोड बहुत समान है सिवाय इसके कि उनका कोड ऐसा लगता है कि यह स्प्रिंग हैंडल क्रमबद्ध करने के लिए कॉन्फ़िगरेशन सेटअप मानता है। वसंत क्रमबद्धता को छोड़कर शायद उत्पादन काम नहीं करता है?

संपादित करें: मैंने प्रतिक्रिया कोड के लिए मेरी अपेक्षा बदल दी है। एक 415 इंगित करेगा कि मैं अपने अनुरोध निकाय में अनुचित सामग्री भेज रहा था जबकि 406 एक स्वीकृत हेडर रखने के लिए उचित है जो सर्वर के सामग्री प्रकार के साथ जैव नहीं करता है।

वैसे भी, मैंने इस विधि को बदल दिया है और मैसन को क्रमबद्ध करने के लिए इसके लिए कॉन्फ़िगर किया है और अब यदि मैं क्लाइंट से अमान्य सामग्री प्रकार भेजता हूं तो मुझे उचित 406 प्रतिक्रिया मिलती है। ऐसा लगता है कि विधि के आउटपुट को क्रमबद्ध नहीं किया जा सकता है जब शायद "उत्पादन" सेटिंग को नजरअंदाज कर दिया जाता है।

+0

शायद आप संशोधित कोड और लागू कॉन्फ़िगरेशन के साथ अपने स्वयं के प्रश्न का उत्तर दे सकते हैं ताकि भविष्य में देखने वाले किसी को लाभ हो सके। – digitaljoel

+0

अगर मैं धारावाहिकता को चालू किए बिना इसे करने का कोई तरीका नहीं समझूंगा तो मैं करूँगा। मेरे पास जो डेटा पहले से है, वह पहले से ही क्रमबद्ध है, इसलिए अगर मुझे इसे डी-सीरियलाइज़ करना था और उचित व्यवहार प्राप्त करने के लिए इसे फिर से क्रमबद्ध करना था तो यह दुर्भाग्यपूर्ण होगा। तो मैं अभी भी यह काम करने के लिए किसी अन्य तरीके की तलाश कर रहा हूं। – mockobject

उत्तर

1

उत्पाद की स्थिति स्प्रिंग एमवीसी 3.1 के लिए नई है और केवल अनुरोध मैपिंग हैंडलर मैपिंग और संबंधित @ एमवीसी समर्थन कक्षाओं, new in Spring 3.1 के साथ समर्थित है। मेरा अनुमान है कि आप 3.0 @ एमवीसी समर्थन कक्षाओं का उपयोग कर रहे हैं, जो उत्पादन की स्थिति का समर्थन नहीं करते हैं। आपका कोड अन्यथा सही है और आपकी अपेक्षाओं की क्या अपेक्षा है।

हेडर = "स्वीकृति = एप्लिकेशन/जेसन" का उपयोग 3.1 में अनावश्यक है। यही वही है जो उत्पादन की स्थिति के लिए पेश किया गया था।

+0

मैं वसंत 3 का उपयोग कर रहा हूं।1 और मेरी निर्भरताओं को सत्यापित किया था, लेकिन जब आपने इसका उल्लेख किया तो मुझे आश्चर्य हुआ कि क्या मेरे कॉन्फ़िगरेशन में कुछ पुराने हैंडलर का उपयोग करने के लिए सेटअप किया गया था। निश्चित रूप से, स्पष्ट रूप से <संदर्भ: एनोटेशन-कॉन्फ़िगर /> का उपयोग पुराने हैंडलर का उपयोग करते हुए का उपयोग करते हुए नए हैंडलर का उपयोग करने के लिए प्रतीत होता है और सब कुछ अपेक्षित काम करता है। कुछ कारणों से यह तथ्य वास्तव में मेरे लिए बिल्कुल स्पष्ट नहीं था क्योंकि मैंने प्रलेखन पढ़ा था। – mockobject

1

@RequestMapping के लिए headers विशेषता के बारे में क्या। आप वहां स्वीकृति शीर्षलेख सेट कर सकते हैं। कुछ ऐसा:

@RequestMapping(value="/{var1}", method=RequestMethod.GET, produces="application/json", headers = "Accept=application/json") 
@ResponseBody 
public String getSomeStuff(@PathVariable final String var1) { 
    return myJsonString; 
} 

मुझे नहीं पता कि स्प्रिंग मिलान पथ के बिना उस पथ के अनुरोध को कैसे संभालेगी। यदि यह आपको नहीं देता है तो आपको हेडर के बिना एक समान मैपिंग को परिभाषित करने की आवश्यकता हो सकती है और इसे एक प्रतिक्रिया दें और प्रतिक्रिया कोड या कुछ सेट करें, लेकिन मुझे उम्मीद है कि यह उचित तरीके से इसे संभालेगा।

+0

दुर्भाग्यवश हेडर सेटिंग भी भद्दा दिखाई देती है। इसके साथ मामूली मुद्दा यह है कि यह 406 के बजाय 404 देता है। बड़ा मुद्दा यह है कि यह किसी कारण से स्पष्ट रूप से छोड़कर हल नहीं करता है। उदाहरण के लिए यदि ग्राहक स्वीकार करता है */* यह त्रुटि होगी। यह केवल तभी हल करता है जब ग्राहक स्वीकृति आवेदन/जेसन भेजता है। जो हमारे लिए भी ठीक है, यह गलत लगता है। – mockobject

+0

यह एक शर्म की बात है। – digitaljoel

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

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