2012-03-23 16 views
11

यहाँ के लिए विधि" खोज "करने में असमर्थ वास्तविक कोड है HTTP स्थिति 405 - अनुरोध विधि 'नष्ट' समर्थित नहीं "वसंत MVC एनोटेट नियंत्रक तरीकों, हटाने आपरेशन

वसंत से प्रवेश की पुष्टि करता है कि इस विधि के लिए कोई मार्ग पाया जा सकता है:

5559 [tomcat-http--3] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing DELETE request for [/vrsboserver/competitors/200] 5562 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 
- Matching patterns for request [/competitors/200] are [/competitors/{id}] 5565 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 
- Mapping [/competitors/200] to handler '[email protected]' 5565 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.WebContentInterceptor - Looking up cache seconds for [/competitors/200] 5565 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.WebContentInterceptor - Applying default cache seconds to [/competitors/200] 5566 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver 
- Resolving exception from handler [[email protected]]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported 5567 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver 
- Resolving exception from handler [[email protected]]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported 5568 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver 
- Resolving exception from handler [[email protected]]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported 5568 [tomcat-http--3] WARN org.springframework.web.servlet.PageNotFound - Request method 'DELETE' not supported 

मेरी प्रतिक्रिया "बुह?" है।

+0

अपने स्प्रिंग जार के सभी एक ही संस्करण हैं? –

+0

बस यह सुनिश्चित करने के लिए, आपने सत्यापित किया है कि एक ही मैपिंग पर एक जीईटी काम करता है? – smp7d

+0

निश्चित रूप से काम करता है। मेवेन को मेरे स्प्रिंग जार मिल रहे हैं, "$ {org.springframework.version}" का उपयोग करके प्रत्येक संस्करण फ़ील्ड के रूप में, इसलिए वे निश्चित रूप से सभी मेल खाते हैं। – Archeus

उत्तर

0

method = RequestMethod.GET करने के लिए इसे बदलने का प्रयास करें और देखें कि क्या यह काम करता है।

+0

जीईटी के लिए हस्ताक्षर वाला एक विधि पहले से मौजूद है (कोड पोस्ट किया गया देखें), और काम करता है। – Archeus

+0

आप ब्राउज़र को एक डेली अनुरोध करने के लिए कैसे कह रहे हैं? हेडर सेट कहां है? इस लिंक की तरह: http://www.ibm.com/developerworks/webservices/library/wa-restful/index.html?ca=drs- – duffymo

+0

क्या आप अपने फॉर्म में विधि = DELETE का उपयोग करते हैं? मैं उत्सुक हूँ, क्योंकि मैं ईमानदारी से नहीं जानता। – duffymo

1

सामान्य ब्राउज़र केवल पोस्ट प्राप्त समर्थन /।

<filter> 
    <filter-name>httpMethodFilter</filter-name> 
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>httpMethodFilter</filter-name> 
    <servlet-name>springDispatcher</servlet-name> 
</filter-mapping> 
0

आप इस http://www.codereye.com/2010/12/configure-tomcat-to-accept-http-put.html कोशिश की:

स्प्रिंग एक छिपा पैरामीटर का उपयोग कर, इसे सक्षम अपने web.xml के लिए नीचे जोड़ने के लिए द्वारा इस का समाधान? यह केवल आपके काम का काम करेगा टॉमकैट पर चल रहा है। ऐसा लगता है कि अधिकांश ऐप सर्वरों ने PUT को संभालने की क्षमता को अक्षम कर दिया है और अनुरोध को डिफ़ॉल्ट रूप से हटा दिया है।

बेशक

, इसे सक्षम करने से शायद नए सुरक्षा छेद करने के लिए आप सामने आ जाएगी।

4

मैं एक ही समस्या थी। क्या मदद करता है और शायद यह अंतिम समाधान नहीं है लेकिन मेरे लिए काम कर रहा है:

विधि हटाए गए कॉम्पेटीटर के एनोटेशन और पैरामीटर का परिवर्तन। आईडी निकालें (विधि पैरामीटर भी)। HttpServletRequest से आईडी पैरामीटर पढ़ें।

@RequestMapping(value = "/competitors", method = RequestMethod.DELETE) 
public String deleteCompetitor(HttpServletRequest request) 
{ 
    String idHeader = request.getHeader("id"); 

    Integer id = Integer.valueOf(idHeader).intValue(); 

    Competitor competitor = new Competitor(); 
    competitor.setId(id); 
    competitorService.deleteCompetitor(competitor); 

    return "Solid gone!"; 
} 

आईडी पैरामीटर हैडर द्वारा इस तरह से पारित हो जाता है (ग्राहक के कोड - पूरा नहीं):

DefaultHttpClient httpClient = new DefaultHttpClient(); 

HttpDelete httpDelete = new HttpDelete... 

... 

httpDelete.setHeader("id", "123"); 

... 

httpClient.execute(httpDelete); 

मैं अपाचे HttpClient उपयोग कर रहा हूँ।

0

मैं हाल ही में इस समस्या में पड़ गए।

मैं वसंत 3.2.2

निम्न संदेश इन सभी मामलों में लॉग पर थूक से बाहर है के साथ बिल्ला 7.0.42 चला रहा हूँ: यहाँ मेरी निष्कर्ष/टिप्पणियों के एक जोड़े हैं। 405 विधि अनुमत नहीं है ग्राहक को वापस कर दिया गया है।

org.springframework.web.servlet.PageNotFound - Request method 'DELETE' not supported 
  1. बाकी यूआरएल आप उपयोग कर रहे गलत है। हालांकि एंडपॉइंट अभी भी नहीं है, फिर भी आपको 405 मिलते हैं।
  2. आप लॉग इन नहीं हैं और कोई कार्रवाई करने के लिए अधिकृत नहीं हैं, अकेले एक DELETE
  3. DELETE वास्तव में समर्थित नहीं है क्योंकि कोई फ़ंक्शन नहीं है विधि के साथ = RequestMethod.GET
  4. बिलाव को हटाते हैं, PUT, आदि जैसे कार्य ब्लॉक कर रहा हैसच
  5. तक केवल पढ़ने के init-परम सेट विधि मौजूद है, हटाने की अनुमति दी है की वजह से, सब कुछ ठीक छोड़कर वहाँ ध्यान में न आया क्रम अपवाद (जैसे नल पॉइंटर एक्सेप्शन) विधि

में अपवाद के साथ किया गया है 3 और 4 का संदेश, दिखाया गया संदेश और प्रतिक्रिया बहुत भ्रामक है। यह आपको जांच खरगोश छेद नीचे भेजता है जो फलहीन समाप्त होता है।

public void deleteSomething(HttpServletRequest request, HttpServletResponse response, @PathVariable("id") long id, @RequestParam("objectName") String objectName); 

अंतर देखें:

public void deleteSomething(HttpServletRequest request, HttpServletResponse response, @PathVariable("id") long id, @RequestParam String objectName); 

यह इस किया जाना चाहिए:

क्या मेरी समस्या किया जा रहा समाप्त हो गया हम इस तरह एक विधि पड़ा है? @RequestParam के बाद यह गायब ("ऑब्जेक्टनाम") है। यह एसटीएस में संकलित और चलाता है, लेकिन जब सीधे टॉमकैट सर्वर पर तैनात किया जाता है, तो यह काम नहीं करता है।

उपरोक्त पद के लिए @fmelan के लिए धन्यवाद क्योंकि इससे हमें इस छोटे टाइपो को खोजने में मदद मिली।

यह नहीं दिखता है जैसे कि यह आपकी समस्या थी, लेकिन किसी और को जो बाहर क्यों 'नष्ट' लगाने की समर्थित नहीं है की कोशिश कर अटक गया है के लिए ...

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