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