web-dev-qa-db-ja.com

JerseyがHTTPステータス405を返します-メソッドは許可されません

Jerseyを使用した非常にシンプルなエンドポイントがあります。私のURLは静的で、リクエストパラメータは必要ありません。次のようになります。

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

ただし、このURLを要求するたびに、常にHTTPステータスコード405-Method Not Allowedを受け取ります。

奇妙なことは、_@Path_注釈を変更してパス変数を定義すると、 @Path("/chart/{blah}")正常に動作します。

これを機能させるためにパス変数を定義する必要がある理由は誰にもわかりますか?パス変数は必要ありませんが、200の応答を得るためだけにパス変数を追加するのはばかげているようです。

19
seedhead

提案をありがとう。最終的には、私のジャージSpringServletの間違ったURLパターンを入力することになりました。そうだった / の代わりに /*

<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>
12
seedhead

メソッドの代わりにクラスに注釈を付けます。

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

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

}

理由はわかりませんが、逆に問題が生じます

5
Eugenio Cuevas

おそらくあなたが指定したからだと思う

@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
tanyehzheng

そのような問題の別の可能性のある原因:すべてのパラメーターと注釈に非常に注意を払ってください。 POSTでメソッドを呼び出していたときに、@PUTアノテーションが付けられていたときに、このような問題が発生していました

2
62mkv