客户端代码:
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
检索到的参数为空。在过滤器中,我们打印 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的某个地方抛出了那些参数......