2012-11-26 53 views
2

問題有關Request parameters are dropped in Tomcat
SERVET請求失去了PARAMS

嗯......很顯然,即使最簡單的請求如下一些服務器上丟失的參數和一些人來說是OK。

@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

這不是一個人如何在StackOverflow上提出問題。郵政編碼和一個破碎的配置,所以我們可以運行它並找出錯誤。 – Raffaele

+0

這是我有的整個代碼,它是一個簡單的GET,丟失了參數。我正在尋求幫助和指導,而不僅僅是直接解決方案。 – urir

+0

你是盲人還是什麼?日誌說'POST/api/get-retrieve HTTP/1.1'。你甚至低估了我的答案。您不斷髮送POST到使用'@ GET'註釋的方法,並詢問爲什麼它不起作用... – Raffaele

回答

3

我這一次,經過長期的調查後,原來的問題是在Tomcat的server.xml中的連接器的定義:

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

看「maxParameterCount」的定義中,我們的情況設置爲0,導致所有請求參數被刪除。

+0

謝謝!這工作!出於某種原因,maxParameterCount被設置爲0 ... – urir

-1

鏈接的問題

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

的問題可能是你註解你的方法,但實際上您的客戶發出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,你應該仔細選擇的方法,並在客戶端和服務器上使用它。

+0

嗨,在鏈接的問題POST進入POST。在這個小例子中,它是GET執行的GET ... – urir

+0

那麼如何重現你的問題呢?整個世界運行在JavaEE上的可能性很小,並且您發現了有關GET解析的錯誤... – Raffaele

+0

我不確定,我在這裏尋找幫助。我的辦公室有3臺主機出現問題,另有3臺主機正常... – urir

0

請確保您不會將httpServletRequest傳遞給其他線程。

0

我們遇到了這個問題,結果我們允許多個線程訪問HttpServletRequest對象。這是不允許的。它不是線程安全的。