2

クライアントコード:

    FormDataBodyPart f = new FormDataBodyPart(...);
    FormDataBodyPart f2 = new FormDataBodyPart(...);
    MultiPart multiPart = new MultiPart();
    multiPart.bodyPart(f);
    multiPart.bodyPart(f2);

    //Execute Call
    WebResource wr = resource().path(Url.X);
    wr = wr.queryParam("subjectId", "value_something");
    ClientResponse response = wr.type(MediaType.MULTIPART_FORM_DATA).post(ClientResponse.class, multiPart);

サーバーコード:

String id = req.getParameter("subjectId");

req は HttpServletRequest です - 春によって注入されます

@Context
protected HttpServletRequest httpServletRequest;

問題: 一部の環境では、id取得されたパラメーターが null です。フィルターでは、while リクエスト パラメーター マップを出力してログインします。これは単に空です。
同じクライアントを実行しても異なる環境でも結果が異なるため、問題はサーバー側にあると考えられます。
一部のサーバーでは、すべてのクライアントからパラメーターが常に空であり、他の環境では、すべてのクライアントからパラメーターが常に存在します。
それで... Tomcat側の問題のように見えますが...どこで?

更新:サーバー上のwiresharkからの結果:

[Malformed Packet: MIME multipart]
Expert Info (Error/Malformed): Malformed Packet (Exception occurred)
Message: Malformed Packet (Exception occurred)

エラーにもかかわらず、一部のサーバーではパラメーターが存在し、他のサーバーではパラメーターが欠落しています。



更新: 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

2 に答える 2

1

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

于 2014-08-15T13:33:51.540 に答える
0

リクエスト オブジェクトが有効かどうかをチェックしますか? また、 request.getParameterMap() を使用してパラメーターを読み取ったり、 Input stream を読み取ったりするなど、他のアプローチを試すこともできます。

于 2012-11-26T07:06:58.117 に答える