2012-09-10 15 views
10

का उपयोग करके एक फॉर्म पोस्ट करने के लिए कैसे मैं जर्सी के साथ एक फॉर्म से कुछ डेटा प्राप्त करने की कोशिश कर रहा हूं और हालांकि यह पूरा करने के लिए एक आसान काम होगा, हालांकि मुझे कुछ पोस्ट करने का प्रयास करने में त्रुटि हो रही है।जर्सी 2.0

Caused by: java.lang.IllegalStateException: The @FormParam is utilized when the content type of the request entity is not application/x-www-form-urlencoded 
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.ensureValidRequest(FormParamValueFactoryProvider.java:126) 
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.getForm(FormParamValueFactoryProvider.java:111) 
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.get(FormParamValueFactoryProvider.java:94) 
at org.glassfish.jersey.server.internal.inject.AbstractHttpContextValueFactory.provide(AbstractHttpContextValueFactory.java:65) 
at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:80) 
... 36 more 

मुझे लगता है कि यह स्टैक ट्रेस का प्रासंगिक हिस्सा है। अब मैं का उपयोग कर कोड के लिए कर रहा हूँ:

@POST 
@Path("/delete") 
@Produces("application/json") 
public String delete(@FormParam("id")String id){ 

और मैं इस तरह एक परीक्षण html पृष्ठ का उपयोग करके पोस्ट करने के लिए कोशिश कर रहा हूँ:

<form action="<path to the server>/delete" method="post"> 
    primary_id: <input type="text" name="primary_id" /><br /> 
    <input type="submit" value="Submit" /> 
</form> 

मैं लेकिन यह काम करने की कोशिश कर रहा है कोई मौका नहीं। मैंने मल्टीपार्ट-फॉर्म-डेटा के साथ @ कंस्यूम्स() एनोटेशन जोड़ने का प्रयास किया है लेकिन वास्तव में इसे काम नहीं कर सकता है। मुझे उम्मीद है कि कोई मुझे हाथ दे सकता है।

+0

खपत (आवेदन/x-www फार्म-urlencoded) – basiljames

+0

मैं कोशिश की, लेकिन एक ही परिणाम मिला है की कोशिश करो। – XFCC

उत्तर

9

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

समस्या यह थी कि मैं एक मानक वेब सर्वर का उपयोग नहीं कर रहा हूं। मैंने जर्सी के साथ एक नेटटी सर्वर लागू किया है और समस्या उस कार्यान्वयन में थी। समस्या यह थी कि मैं जर्सी के HTTP अनुरोध में हेडर को पास नहीं कर रहा था जैसा कि मुझे करना चाहिए। मैं ऑपरेशन के बीच में सामग्री-प्रकार खो रहा था, इसका मतलब है कि जर्सी संदेश प्रकार की पहचान नहीं कर सका।

तो, भविष्य के संदर्भ के लिए, किसी भी व्यक्ति के लिए जर्सी का उपयोग करके एक गैर मानक सर्वर को लागू करने का प्रयास करते समय एक ही समस्या है: जब आप मीडिया प्रकार को सही तरीके से पास नहीं करते हैं (ContentRequest में getMediaType() नामक एक विधि है वर्ग जो अन्य चीजों के साथ, सामग्री-प्रकार को सत्यापित करने के लिए @FormParam का उपयोग किया जाता है) आपको इस प्रकार की अपवाद मिल जाएगी।

फिर से, आप सभी की मदद के लिए धन्यवाद :)

+0

मुझे यह उत्तर उपयोगी http://blog.junctiontv.com/wp/ मिला?पी = 150 – Dudi

+0

क्या आप इसका उदाहरण दे सकते हैं कि आपने यह कैसे किया? – Wax

+0

अच्छी तरह से, यह 5 साल पहले था और मुझे विशिष्टताओं को याद नहीं है। आपका सवाल नेटसी को जर्सी बाध्य करने के बारे में है या सिर्फ हेडर कैसे पारित किया गया है? – XFCC

1

आप अपने इनपुट को "प्राथमिक_आईडी" के रूप में नाम दे रहे हैं, लेकिन आपको अपने @FormParm एनोटेशन में "आईडी" नाम प्राप्त हो रहा है। अपने इनपुट टैग में आईडी और नाम को "आईडी" में बदलें।

इसके अलावा

अगर आप उपभोग कर रहे हैं आवेदन/x-www फार्म-urlencoded, आपके प्रपत्र टैग में यह विशेषता जोड़ें: enctype = "application/x-www फार्म-urlencoded"

+0

मैं सहायता के लिए बहुत आभारी हूं लेकिन "प्राथमिक_आईडी" एक टाइपो था। मैंने कर्ल के साथ भी कोशिश की है। मुझे थोड़ा हताश हो रहा है। मैंने enctype = "application/x-www-form-urlencoded" के साथ भी प्रयास किया है। कोई भाग्य नहीं। – XFCC

+0

अजीब .. सुनिश्चित करें कि सभी libs एक ही संस्करण हैं (उदा। 1.13)। –

+0

वास्तव में, जैसा कि मैंने शीर्षक में कहा था कि मैं जर्सी 2.0 का उपयोग कर रहा हूं। वैसे भी मुझे समस्या मिली है, मैं इसे भविष्य के संदर्भ के लिए पोस्ट करूंगा, भले ही मुझे नहीं लगता कि किसी को भी ऐसी ही समस्या होगी :) – XFCC

3

आपका कोड को छोड़कर ठीक काम कर रहा है आप जब से तुम @Consumes (परिभाषित havent

<input type="text" name="id" /> 

बदलने के लिए) की जरूरत है, डिफ़ॉल्ट रूप से विधि की खपत mediaType="application/x-www-form-urlencoded" .

मैं अपने कोड का परीक्षण किया है और इसे यहाँ बिल्कुल ठीक काम कर रहा है हटा दें। मेरा सुझाव आपकी जर्सी जार फ़ाइलों को विशेष रूप से jsersey-server.jar फ़ाइल को अपने lib फ़ोल्डर में जांचें।

+0

वास्तव में आपने जो भी कहा वह सच था और मैं आपकी मदद के लिए धन्यवाद देता हूं। अन्य कक्षाओं की जांच करने के बाद मुझे समस्या मिली। – XFCC