15

またはとして、JAX-RS リソース メソッドから生のリクエスト ボディにアクセスするにはどうすればよいですjava.io.InputStreambyte[]? MessageBodyReaderコンテナーが特定のリソース クラスまたはメソッドに対してany をバイパスするようにしたいのですが、いくつかのMessageBodyReader.

私はこれを試しましたが、登録されたMessageBodyReaders を呼び出し、結果をに割り当てることができませんInputStream( と同じ問題byte[])。

@POST
public Response post(@Context HttpHeaders headers, InputStream requestBody) {
    MediaType contentType = headers.getMediaType();
    // ... 
}

私もこれを試しましたが、コンテナは次のエラーで初期化に失敗します:

SEVERE: 次のエラーと警告が、リソース クラスやプロバイダー クラスで検出されました。
SEVERE: メソッド public javax.ws.rs.core.Response SomeResource.post(javax.servlet.http.HttpServletRequest) の依存関係がインデックス 0 のパラメーターにありません
SEVERE: メソッド public javax.ws.rs.core.Response SomeResource.post(javax.servlet.http.HttpServletRequest) は、リソース クラス SomeResource の POST で注釈が付けられており、有効なリソース メソッドとして認識されません。
@POST
public Response post(@Context HttpServletRequest request) {
    String contentType = request.getContentType();
    InputStream requestBody = request.getInputStream();
    // ... 
}

@Pathメソッドは、別のリソース クラスのアノテーションを持つメソッドから作成されたサブ リソース クラスにあります。

私はJersey 1.11を使用しています。

4

3 に答える 3

2

HttpServletRequest の挿入が機能しない理由を見つけました。これは、適切なサーブレット コンテナー内ではなく、ジャージー テスト フレームワークでコードを実行したためです。適切なサーブレットコンテナーで実行すると機能します。

生のリクエストボディを取得する純粋な JAX-RS の方法がないのは残念です。

于 2013-04-23T16:30:09.847 に答える