2012-05-18 13 views
12

[का उपयोग अपाचे बिलाव/7.0.27]बहुत अजीब: HTTP स्थिति 405 - पद्धति की अनुमति नहीं

ऐसा लगता है मैं केवल यह त्रुटि प्राप्त

  • (HTTP स्थिति 405 - पद्धति की अनुमति नहीं)

जब मैं ब्राउज़र से सीधे एक बाकी अनुरोध करने के लिए प्रयास करें।

उदा पता पट्टी में इस पेस्ट करके:

http://localhost:8080/restExample/rest/catalog/video/14951/hello 

जब मैं अपने परीक्षण ग्राहक Main.java चलाने सब कुछ ठीक काम करता है।

कोई विचार यह है कि यह मुझे ब्राउज़र के माध्यम से एक आरईएसटी निष्पादित क्यों नहीं करेगा?

क्लाइंट साइड:

public class Main{ 
    public static void main(String [] args){ 
     ClientConfig config = new DefaultClientConfig(); 
     Client client = Client.create(config); 
     WebResource service = client.resource(getBaseURI(_package)); 
     runPutRequest(service,"video/128/This is the content with the new description"); 
    } 
} 

... 
private static void runPutRequest(WebResource service,String path){ 
     String response = service.path("rest/catalog/"+path).accept(MediaType.APPLICATION_XML).put(String.class); 
     System.out.println("Post Response :"+response); 
    } 

सर्वर साइड:

@PUT 
@Path("/video/{video-id}/{short-descr}") 
@Consumes(MediaType.TEXT_PLAIN) 
@Produces(MediaType.APPLICATION_XML) 
public Video updateVideo(@PathParam("video-id") int contentid, 
         @PathParam("short-descr") String descr) 
{  
    //Video video = searchByContentId(contentid); 
    Video video = videoMap.get(contentid); 
    video.setDescription(descr); 

    videoMap.put(contentid,video); 

    if(videoMap.get(contentid) != null){ 
     return videoMap.get(contentid); 
    }else{ 
     throw new UnsupportedOperationException("NO object found"); 
    } 
} 
+1

पुट बनाम प्राप्त करें .... – esej

उत्तर

18

ब्राउज़र आपके संसाधन के लिए एक GET अनुरोध जारी करेगा - जिसे आपने सर्वर-साइड पर @PUT के रूप में घोषित किया है और इसे अपने क्लाइंट-साइड कोड से पुट-इन कर रहे हैं। ब्राउज़र संसाधन को 'लाने' (या जीईटी) करने की कोशिश कर रहा है और @GET

+0

क्या ब्राउज़र में @PUT का परीक्षण करने का कोई तरीका है? – Fabii

+0

'विधि। 'पुट' के साथ' $ .ajax' का उपयोग करके एक साधारण jQuery कॉल बनाने का प्रयास करें और आपको जो भी पैरामीटर/डेटा चाहिए ... – PhD

+1

आप अपने लिए इन अनुरोधों को कस्टम बनाने के लिए फिडलर का उपयोग भी कर सकते हैं :) – PhD

6

आम तौर पर, ब्राउज़र प्राप्त HTTP अनुरोध बनाने के लिए विधि का उपयोग करता। आपका सर्वर साइड घटक केवल PUT अनुरोधों का जवाब देने में सक्षम है, और यही कारण है कि आपको वह त्रुटि कोड मिलता है।

+0

धन्यवाद, बहुत उपयोगी – Fabii

2

के लिए कुछ भी मौजूद नहीं है, ऐसे ब्राउज़र के लिए आरईएसटी क्लाइंट मौजूद हैं जो PUT, POST, और DELETE अनुरोध करने में सक्षम हैं। मैं क्रोम के लिए Simple REST Client पसंद करता हूं।

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