2012-07-18 8 views
16

Tengo un punto final muy simple usando Jersey. Mi URL es estática, no requiere ningún parámetro de solicitud. Se ve así:Jersey devuelve el estado HTTP 405 - Método no permitido

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

Sin embargo, cada vez que solicito este URL, siempre recibo un código de estado HTTP 405 - Método no permitido.

Lo raro es que si cambio la anotación @Path y defino una variable de ruta, p. @Path("/chart/{blah}") funciona bien.

¿Alguien tiene una idea de por qué tengo que definir una variable de ruta para que esto funcione? No necesito una variable de ruta y me parece tonto agregar una solo para obtener una respuesta de 200.

+1

¿Cómo está usted solicitando la URL? p.ej. - publique la URL real que intenta usar. –

+0

La URL que estoy usando es: http: // localhost: 8080/mydata – seedhead

Respuesta

10

Gracias por las sugerencias. Terminó siendo estúpido al ingresar un patrón de url incorrecto para mi jersey SpringServlet. Fue lugar de //*

<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

Creo que es probablemente porque ha especificado

@Produces(MediaType.APPLICATION_JSON). 

1) Tal vez debería intentar ejecutar lo siguiente en un terminal

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

2) O pruebe el cambio a

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

Gracias por la sugerencia, desafortunadamente, ambos elementos siguen dando como resultado la devolución de un 405. – seedhead

+0

@seedhead lo siento, ¿puedes probar el método 1 otra vez? Me di cuenta de que copié y pegué el encabezado equivocado – tanyehzheng

4

Anota la clase en lugar del método:

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

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

} 

No sé por qué, pero también me da problemas a la inversa

Cuestiones relacionadas