2012-06-12 10 views
8

मैं एक सरल विधि है, इसलिए की तरह लग रहा है कि (बिलाव 6.0.35 पर चल रहा है) पैरामीटर की तरह (डी = शरीर में gggg) मुझे 400 खराब अनुरोध मिलता है। लेकिन अगर मैं इसेस्प्रिंग बिलाव पर RequestMethod.DELETE साथ @RequestParam का उपयोग कर MVC 6.0.35

@RequestMapping(value = "/bla/d", method = RequestMethod.POST) 
@ResponseStatus(HttpStatus.NO_CONTENT) 
public void d(@RequestParam String d){ 
    //logic here 
} 

पर बदलता है तो यह पूरी तरह से काम करता है। मैं एक Firefox का उपयोग कर रहा था एड-ऑन यह (और अजगर और एक ही परिणाम के साथ वसंत के RestTemplate) का परीक्षण करने के लिए यहाँ कैसे पोस्ट के साथ अनुरोध वर्णन दिया गया है (एक एक सामना चिपकाया नामित विधि है पैरामीटर के साथ एक एक):

POST /bla/a HTTP/1.1 
Host: ~~~~:8080 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Content-Length: 7 
Pragma: no-cache 
Cache-Control: no-cache 
a=asdas 

HTTP/1.1 204 No Content 
Server: Apache-Coyote/1.1 
Date: Tue, 12 Jun 2012 09:29:46 GMT 

DELETE /bla/d HTTP/1.1 
Host: ~~~~~:8080 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Content-Length: 7 
d=asdas 

HTTP/1.1 400 Bad Request 
Server: Apache-Coyote/1.1 
Content-Type: text/html;charset=utf-8 
Content-Length: 971 
Date: Tue, 12 Jun 2012 09:30:04 GMT 
Connection: close 

कृपया मेरी मदद करो, मैं कुछ बेवकूफ अनुपलब्ध हो सकता है लेकिन मैं सिर्फ यह नहीं देख सकते हैं: और की तरह दिखता है हटा दें। मेरी मूल समस्या डेली अनुरोध के साथ पोस्ट-जैसी बॉडी के माध्यम से एक सरणी भेज रही थी लेकिन ऐसा लगता है कि कुछ और बुनियादी गलत है।

उत्तर

13

खैर कुछ शोध और डिबगिंग करने के बाद मुझे पता चला है कि वसंत के ServletWebREquest org.apache.catalina.connector.RequestFacade.getParameterValues ​​जो getParameterValues ​​जिसमें मैं निम्न पंक्ति पाया है कहता है की getParameterValues ​​कॉल (Request.java 2599 -2600):

if (!getMethod().equalsIgnoreCase("POST")) 
return; 

कौन सा है जिसका अर्थ है बिलाव सक्रिय रूप से है इन्हें हटाना बाद जैसे पैरामीटर भेजने के लिए किसी भी प्रयास को मारता है इस यूज-केस को प्रतिबंधित करता है, भले ही आरएफसी does not restrict such usage (हालांकि यह कहा गया है कि कुछ मौजूदा कार्यान्वयन इस तरह अस्वीकार कर सकते हैं अनुरोध, टॉमकैट बस इसके पैरामीटर को फेंकता है)। स्प्रिंग और टॉमकैट का उपयोग करने वाले किसी व्यक्ति को क्या लाता है और बदसूरत समाधानों के पैरामीटर के साथ एक डिलीट अनुरोध भेजने की कोशिश कर रहा है जैसे सभी अनुरोध निकाय को @RequestBody के साथ प्राप्त करना और इसे मैन्युअल रूप से निकालना जो आपकी अनुमानित निर्दोष विधि बनाता है जो कुछ लोगों के बारे में कुछ जानना चाहता है मानचित्र जिसमें अनुरोध निकाय है।

@fmucar

0

मैं ने वही समस्या और समाधान है कि मैंने पाया क्वेरी स्ट्रिंग में फ़ील्ड्स जोड़ने के लिए था हो रही थी। मैं अभी भी कारणों को जानना चाहूंगा कि इस तरह से एक फार्म बॉडी को क्यों बाहर रखा जाएगा, लेकिन अभी यह एक काम है।

तो आपके उदाहरण के लिए इसका मतलब है ? ए = asdas होस्ट में: ~~~~~: 8080 यूआरएल।

मैं वसंत-वेबएमवीसी का उपयोग कर रहा हूं: 3.2.4.RELEASE इसलिए मुझे यकीन नहीं है कि यह आपके संस्करण में काम करेगा या नहीं।

0

यह एक बहुत पुरानी पोस्ट है, लेकिन अगर कोई और यह देख रहा है कि DELETE विधियों पर @RequestParam को कैसे सक्षम किया जाए, तो मैंने टॉमकैट 8.5.4 पर क्या किया है।

में
@Value("${server.parseBodyMethods}") 
private String parseBodyMethods; 

@Bean 
public TomcatEmbeddedServletContainerFactory containerFactory() { 
    return new TomcatEmbeddedServletContainerFactory() { 
     protected void customizeConnector(Connector connector) { 
      super.customizeConnector(connector); 
      connector.setParseBodyMethods(parseBodyMethods); 
     } 
    }; 
} 

प्लग कस्टमाइज़र द्वारा करने के लिए 'पोस्ट, हटाएँ', और अपने हटाने अनुरोध पैरामीटर काम शुरू कर देना चाहिए।

मुझे org.apache.catalina.connector में parseBodyMethods मिला।

यह RESTful अनुप्रयोगों PUT अनुरोध के लिए पोस्ट-शैली अर्थ विज्ञान का समर्थन करना चाहते है कि में उपयोगी है: कनेक्टर, और यहाँ उस पर बिलाव के दस्तावेज़ है। ध्यान दें कि POST के अलावा कोई भी सेटिंग टोमकैट को ऐसे तरीके से व्यवहार करने का कारण बनती है जो सर्वलेट विनिर्देश के इरादे से गुजरती है। HTTP विधि TRACE को विशेष रूप से HTTP विनिर्देश के अनुसार प्रतिबंधित किया गया है। डिफ़ॉल्ट पोस्ट (Source)

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