web-dev-qa-db-fra.com

Jersey renvoie le statut HTTP 405 - Méthode non autorisée

J'ai un point d'extrémité très simple en utilisant Jersey. Mon URL est statique, elle ne nécessite aucun paramètre de requête. Cela ressemble à ceci: 

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

Cependant, chaque fois que je demande cette URL, je reçois toujours un code d'état HTTP de 405 - Méthode non autorisée.

La chose étrange est que, si je modifie l'annotation @Path et que je définis une variable de chemin, par exemple @Path("/chart/{blah}") cela fonctionne bien.

Quelqu'un at-il une idée de la raison pour laquelle je dois définir une variable de chemin pour que cela fonctionne? Je n'ai pas besoin d'une variable de chemin et il semble idiot d'en ajouter une juste pour obtenir une réponse de 200.

17
seedhead

Merci pour les suggestions. En fin de compte, il m'est arrivé d'entrer stupidement un motif d'URL incorrect pour mon maillot SpringServlet. C'était / au lieu 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>
10
seedhead

Annotez la classe à la place de la méthode:

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

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

}

Je ne sais pas pourquoi mais cela me pose également des problèmes dans l'autre sens

4
Eugenio Cuevas

Je pense que c'est probablement parce que vous avez spécifié 

@Produces(MediaType.APPLICATION_JSON).

1) Peut-être devriez-vous essayer d'exécuter ce qui suit dans un terminal

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

2) Ou essayez de changer à

@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_HTML})
3
tanyehzheng

une autre source possible de ce problème: soyez très attentif avec tous les paramètres et annotations. J'avais un tel problème quand j'appelais une méthode avec POST alors qu'elle était annotée avec @PUT

0
62mkv