3

リクエスト パラメータに関する質問が Tomcat にドロップされる

ええと...どうやら、一部のサーバーでは以下のような最も単純なリクエストでさえパラメーターが失われ、一部のサーバーでは問題ありません。

@GET
@Path("/get-retrieve")
public String foo(){
    return ""+httpServletRequest.getParameterMap().size();
}

したがって、戻り値は0(ゼロ) です。

更新: AccessLogValve によってログに記録された要求には、パラメーターが含まれています

127.0.0.1 - - [26/Nov/2012:03:04:58 -0800] "POST /api/get-retrieve?x=y HTTP/1.1" 200 16

したがって、おそらく問題は、Tomcat のどこかでこれらのパラメーターを捨てていることです...

4

4 に答える 4

4

長い調査の結果、Tomcat の server.xml のコネクタの定義に問題があることが判明しました。

<Connector connectionTimeout="20000" maxHttpHeaderSize="9000" maxParameterCount="100" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

「maxParameterCount」の定義を見てください。私たちの場合は 0 に設定されていたため、すべてのリクエスト パラメータが削除されました。

于 2012-11-26T12:31:13.793 に答える
0

HttpServletRequestこの問題があり、複数のスレッドにオブジェクトへのアクセスを許可していたことが判明しました。これは許可されていません。スレッドセーフではありません。

于 2014-08-15T13:34:08.563 に答える
0

httpServletRequest を別のスレッドに渡さないようにしてください。

于 2013-12-13T15:01:48.003 に答える
-1

リンクされた質問に投稿されたコードに基づく

wr.type(MediaType.MULTIPART_FORM_DATA).post(ClientResponse.class, multipart);

問題は、メソッドに で注釈を付けている可能性があります@GETが、実際にはクライアントがPOST. JAX-RS の実装によっては、リクエストをメソッドにルーティングしても、メソッドの不一致が原因でパラメーターを抽出できない場合があります。GET がどのように見えるかを比較すると、アルゴリズムは実際には非常に異なります。

GET /path/to/resource?id=foobar HTTP/1.1
Host: example.com

とポスト:

POST /path/to/resource HTTP/1.1
Host: example.com
Content-Type: multipart/form-data, boundary=A9zfsdf0x;9ad

--A9zfsdf0x;9ad
content-disposition: form-data; name="id"

foobar

したがって、RESTful API を設計するときは、メソッドを慎重に選択し、クライアントとサーバーの両方で使用する必要があります。

于 2012-11-26T10:32:32.780 に答える