与Request parameters are dropped in 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的某个地方抛弃那些参数......
答案 0 :(得分:4)
我有过一次,经过长时间的调查后发现问题出现在Tomcat的server.xml中Connector的定义中:
<Connector connectionTimeout="20000" maxHttpHeaderSize="9000" maxParameterCount="100" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
查看“maxParameterCount”的定义,在我们的例子中,它被设置为0,导致所有请求参数被删除。
答案 1 :(得分:0)
确保你没有将httpServletRequest传递给另一个线程。
答案 2 :(得分:0)
我们遇到了这个问题,结果发现我们允许多个线程访问HttpServletRequest
对象。这是不允许的。它不是线程安全的。
答案 3 :(得分:-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:
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时,您应该仔细选择方法,并在客户端和服务器上使用它。