0

サイトブリックを使用して、get、post、put、delete の 4 つの http メソッドを使用して、単純な残りのサービスを実装しています。WebClient を使用して定義済みのサービスに削除要求を送信しようとすると、405 応答が返されます。なぜそのような応答が得られるのか誰か知っていますか?

10:22:24.840 [5907955@qtp-6711891-2 - /r/clients/123] DEBUG org.mortbay.log - 応答 /r/clients/123 405

これが私がWebクライアントを使用する方法です

 WebClient client = web().clientOf(delete(123)).transports(String.class).over(Json.class);
    client.delete();

ここに私の削除方法があります

 @Delete
  @At("/:id")
  public Reply delete(@Named("id") String id) {
    clientsRepository.delete(id);
    return Reply.saying().ok();
  }

Jetty サーバーを使用しています。

4

2 に答える 2

1

応答コード 405 は、何かが http DELETE メソッドの使用を許可しないように構成されていることを意味します。

サイトブリック自体については言えませんが、サーブレットの仕様により、特定のメソッドを無効にすることができます。

特定のHTTP メソッド (TRACE、 web.xmlPUT ${jetty.home}/etc/webdefault.xml、DELETE など) の使用を禁止するように構成できます。

DELETE の宣言が含まれ<security-constraints>ている可能性があるファイルを確認してください。<http-method>

また、どのコードでも 405 応答自体をトリガーできることに注意してください。これは Sitebricks で表示されているため、おそらく<filter>web.xml の a がそれを妨げています。

于 2013-01-02T23:34:25.857 に答える
1

リクエスト URI を適切に作成していますか? ハンドラー メソッドがない場合、Sitebricks は 405 を返します。このテスト ケースでは、@Delete が実際に正しく機能することを確認します。

https://github.com/dhanji/sitebricks/blob/master/sitebricks-acceptance-tests/src/main/java/com/google/sitebricks/example/RestfulWebServiceWithSubpaths2.java

また、joakime が言うように、他のフィルターやハンドラーが Sitebricks の外部で起動しているかどうかを確認してください。

于 2013-01-03T04:24:09.557 に答える