20

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 応答を取得するためだけにパス変数を追加するのはばかげているようです。

4

5 に答える 5

12

提案をありがとう。結局、ジャージの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>
于 2012-07-19T09:37:35.673 に答える
6

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

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

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

}

理由はわかりませんが、他の方法でも問題が発生します

于 2012-07-19T09:04:51.550 に答える
4

多分指定したからだと思う

@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})
于 2012-07-19T07:47:10.910 に答える
4

このような問題の別の原因として考えられるのは、すべてのパラメーターと注釈に十分注意することです。POSTでメソッドを呼び出していたときに、アノテーションが付けられているときに、このような問題が発生していました@PUT

于 2018-05-04T05:31:32.577 に答える
-7

私は同じ問題に苦しんでいました。http://localhost:8080/mypath/myendpointが機能していませんでした。

http://localhost:8080/rest/mypath/myendpointのように、「/rest」をパスに追加してみてください。

于 2015-05-18T16:57:07.783 に答える