2012-05-18 10 views
12

[utilizzando Apache Tomcat/7.0.27]Molto singolare: HTTP Stato 405 - Metodo non consentito

Sembra ho solo questo errore

  • (HTTP Stato 405 - Metodo non ammessi)

quando si tenta di effettuare una richiesta REST direttamente dal browser.

per esempio incollando questo nella barra degli indirizzi:

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

Quando eseguo il mio client di prova Main.java tutto funziona bene.

Qualche idea sul motivo per cui non mi consente di eseguire un REST tramite il browser?

lato client:

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

lato server:

@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

risposta

18

Il browser invierà una richiesta GET per la risorsa, che è stata dichiarata come @PUT sul lato server e vi sta eseguendo il PUT-in dal codice lato client. Il browser sta cercando di "recuperare" (o OTTENERE) la risorsa e nulla esiste per @GET

+0

C'è un modo per testare @PUT in un browser? – Fabii

+0

prova a creare una semplice chiamata jQuery usando '$ .ajax' con' metodo: 'PUT'' e passa tutti i parametri/dati che ti servono ... – PhD

+1

Puoi naturalmente usare Fiddler per creare queste richieste anche per te :) – PhD

6

In generale, il browser utilizza il metodo HTTP GET per effettuare richieste. Il tuo componente lato server è solo in grado di rispondere alle richieste PUT, ed è per questo che ottieni il codice di errore.

+0

Grazie, molto utile – Fabii

2

Esistono client REST per i browser che sono in grado di eseguire richieste PUT, POST e DELETE. Preferisco Simple REST Client per Chrome.

Problemi correlati