2012-05-18 2 views
12

[mit Apache Tomcat/7.0.27]Sehr eigentümlich: HTTP-Status 405 - Methode nicht erlaubt

Es scheint nur ich diesen Fehler

  • (HTTP-Status 405 - Methode nicht erlaubt)

wenn ich versuche, eine REST-Anfrage direkt aus dem Browser zu machen.

Z. B durch das Einfügen in die Adressleiste:

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

Wenn ich meinen Test-Client laufen Main.java alles funktioniert.

Irgendwelche Ideen, warum es mich nicht erlaubt, einen REST durch den Browser auszuführen?

Client Side:

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); 
    } 

Server-Seite:

@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

Put vs Get .... – esej

Antwort

18

Der Browser gibt eine GET-Anforderung für Ihre Ressource aus, die Sie auf der Serverseite als @PUT deklariert haben und sie von Ihrem clientseitigen Code aus eingeben. Der Browser versucht, die Ressource abzurufen (oder abzurufen), und für @GET gibt es keine Angabe.

+0

Gibt es eine Möglichkeit, @PUT in einem Browser zu testen? – Fabii

+0

Versuchen Sie, einen einfachen jQuery-Aufruf mit '$ .ajax' mit' method: 'PUT'' zu erstellen und übergeben Sie alle Parameter/Daten, die Sie benötigen ... – PhD

+1

Sie können natürlich auch Fiddler verwenden, um diese Anfragen für Sie zu erstellen :) – PhD

6

Im Allgemeinen verwendet der Browser GET HTTP-Methode Anfragen zu machen. Ihre serverseitige Komponente ist nur in der Lage, auf PUT-Anfragen zu antworten, und deshalb erhalten Sie diesen Fehlercode.

+0

Vielen Dank, sehr hilfreich – Fabii

2

Es gibt REST-Clients für Browser, die PUT-, POST- und DELETE-Anforderungen ausführen können. Ich bevorzuge Simple REST Client für Chrome.

Verwandte Themen