2012-05-18 16 views
12

[usando Apache Tomcat/7.0.27]muy peculiar: HTTP Status 405 - Método no permitido

parece que sólo se sale este error

  • (HTTP Status 405 - Método no permitido)

cuando intento realizar una solicitud REST directamente desde el navegador.

por ejemplo pegando esto en la barra de direcciones:

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

Cuando ejecuto mi cliente de prueba Main.java todo funciona bien.

¿Alguna idea de por qué no me deja ejecutar un REST a través del navegador?

lado del cliente:

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

lado del servidor:

@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 versus Get .... – esej

Respuesta

18

El explorador emitirá una solicitud GET para su recurso, que ha declarado como @PUT en el lado del servidor y está PUT-ing desde el código del lado del cliente. El navegador está intentando "recuperar" (o OBTENER) el recurso y no existe nada para @GET

+0

¿Hay alguna forma de probar @PUT en un navegador? – Fabii

+0

intente crear una llamada jQuery simple usando '$ .ajax' con' método: 'PUT'' y pase los parámetros/datos que necesite ... – PhD

+1

Por supuesto, puede usar Fiddler para crear estas solicitudes a su medida :) – PhD

6

En general, el navegador utiliza el método HTTP GET para hacer peticiones. El componente del lado del servidor solo es capaz de responder a las solicitudes PUT, y es por eso que obtienes ese código de error.

+0

Gracias, muy útil – Fabii

2

Existen clientes REST para buscadores que son capaces de realizar solicitudes PUT, POST y DELETE. Prefiero Simple REST Client para Chrome.

Cuestiones relacionadas