请求参数在Tomcat中被删除

时间:2012-11-26 06:56:29

标签: java web-services tomcat servlets jersey

客户代码:

    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 - 由spring注入

@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的某个地方,抛弃那些参数......

2 个答案:

答案 0 :(得分:0)

检查请求对象是否有效? 您还可以尝试其他方法,例如使用request.getParameterMap()读取参数或读取输入流。

答案 1 :(得分:0)

我们遇到了这个问题,结果发现我们允许多个线程访问HttpServletRequest对象。这是不允许的。它不是线程安全的。