Джерси возвращает статус HTTP 405 - метод не разрешен
У меня очень простая конечная точка, использующая Джерси. Мой URL статический, он не требует никаких параметров запроса. Это выглядит так:
@GET
@Path("/mydata")
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public String getData() {
return "{'name': 'value'}";
}
Однако всякий раз, когда я запрашиваю этот URL-адрес, я всегда получаю код состояния HTTP 405 - метод не разрешен.
Странно, что если я изменю аннотацию @Path
и задаю переменную пути, например. @Path("/chart/{blah}")
он отлично работает.
Есть ли у кого-нибудь идея, почему я должен определить переменную пути, чтобы заставить это работать? Мне не нужна переменная пути, и кажется глупым добавить ее, чтобы получить ответ 200.
Ответы
Ответ 1
Спасибо за предложения. Это закончилось тем, что я глупо ввел неправильный шаблон url для моей майки SpringServlet. Это было /
вместо /*
<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>
Ответ 2
Аннотировать класс вместо метода:
@Path("/mydata")
public class MyClass(){
@GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public String getData() {
return "{'name': 'value'}";
}
}
Я не знаю, почему, но это также создает проблемы другим способом.
Ответ 3
Я думаю, это возможно потому, что вы указали
@Produces(MediaType.APPLICATION_JSON).
1) Возможно, вам стоит попробовать запустить следующее в терминале
curl -i -X GET -H 'Accept:application/json' http://localhost:8080/mydata
2) Или попробуйте перейти на
@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_HTML})
Ответ 4
У меня была одна и та же проблема; http://localhost:8080/mypath/myendpoint не работал.
Попробуйте добавить "/rest" к пути, как в http://localhost:8080/rest/mypath/myendpoint