2012-07-18 15 views
16

मेरे पास जर्सी का उपयोग करके एक बहुत ही सरल अंतराल है। मेरा यूआरएल स्थिर है, इसे किसी भी अनुरोध पैरामीटर की आवश्यकता नहीं है। ऐसा लगता है:जर्सी HTTP स्थिति 405 देता है - विधि स्वीकृत नहीं

@GET 
@Path("/mydata") 
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) 
public String getData() { 
    return "{'name': 'value'}"; 
} 

हालांकि, जब भी मैं इस यूआरएल का अनुरोध करता हूं, मुझे हमेशा 405 का HTTP स्टेटस कोड प्राप्त होता है - विधि अनुमत नहीं है।

अजीब बात यह है कि अगर मैं @Path एनोटेशन बदलता हूं और पथ चर परिभाषित करता हूं उदा। @Path("/chart/{blah}") यह ठीक काम करता है।

क्या किसी को पता है कि मुझे इसे काम करने के लिए पथ चर परिभाषित क्यों करना है? मुझे पथ चर की आवश्यकता नहीं है और 200 प्रतिक्रिया प्राप्त करने के लिए केवल एक को जोड़ने के लिए मूर्खतापूर्ण लगता है।

+1

में आप URL कैसे अनुरोध कर रहे हैं, पथ के लिए "/ बाकी" जोड़ने का प्रयास करें? जैसे - वास्तविक यूआरएल पोस्ट करें जिसे आप उपयोग करने का प्रयास कर रहे हैं। –

+0

मैं जिस यूआरएल का उपयोग कर रहा हूं वह है: http: // localhost: 8080/mydata – seedhead

उत्तर

10

सुझाव के लिए धन्यवाद। यह मेरी जर्सी स्प्रिंगसेर्लेट के लिए बेवकूफ रूप से एक गलत यूआरएल पैटर्न में प्रवेश कर रहा है। यह //*

<servlet> 
    <servlet-name>MyServlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
</servlet> 

<url-pattern>/*</url-pattern> 

<servlet-mapping> 
    <servlet-name>Chart Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
3

मुझे लगता है कि यह शायद है क्योंकि आपने निर्दिष्ट

@Produces(MediaType.APPLICATION_JSON). 

1 है) हो सकता है आप) एक टर्मिनल

curl -i -X GET -H 'Accept:application/json' http://localhost:8080/mydata 

2 में निम्नलिखित चलाने की कोशिश करनी चाहिए या

@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_HTML}) 
+1

सुझाव के लिए धन्यवाद, दुर्भाग्य से इनमें से दोनों अभी भी 405 लौट रहे हैं। – seedhead

+0

@seedhead क्षमा करें, क्या आप विधि 1 फिर से कोशिश कर सकते हैं? मुझे एहसास हुआ कि मैंने गलत हेडर कॉपी और पेस्ट किया है – tanyehzheng

4

करने के लिए परिवर्तन की कोशिश विधि के बजाय वर्ग को एनोटेट करें:

@Path("/mydata") 
public class MyClass(){ 

@GET 
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) 
public String getData() { 
    return "{'name': 'value'}"; 
} 

} 

मैं पता नहीं क्यों, लेकिन यह भी मुझे समस्याओं अन्य रास्ता देती है

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