最近用Jetty跑Spring MVC接收POST請求(POST中數據很大)。出現數據無法獲取到的問題。如:
@RequestMapping(value = "/receive", method = RequestMethod.POST) public receive(String a,String b,String c)
其中a是從POST中獲取,先前數據量小的時候,可以取到沒有問題。
用抓包工具看,發現POST數據沒發完就HTTP就返回了。這點很奇怪
調大下面的參數值:
<Set name="outputBufferSize"><Property name="jetty.output.buffer.size" default="32768" /></Set> <Set name="requestHeaderSize"><Property name="jetty.request.header.size" default="8192" /></Set> <Set name="responseHeaderSize"><Property name="jetty.response.header.size" default="8192" /></Set> <Set name="headerCacheSize">512</Set>
改了很大,10倍的增加,結果too much data不報了,可是依然還是取不到要的參數。調得很大還有內存溢出,還得調小其他參數,如線程數。
改變方式修改Content-Type為 application/x-www-form-urlencoded 或multipart/form-data,一樣沒有效果。
試過多種方式后,使用@RequestBody注解了a,結果,成功了。而且不需要調整jetty的參數。
為什么用@RequestBody?
@RequestBody
作用:
- 該注解用於讀取Request請求的Body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然后把相應的數據綁定到要返回的對象上;
- 再把HttpMessageConverter返回的對象數據綁定到Controller中方法的參數上。
使用時機:
A) GET、POST方式提時, 根據Request Header Content-Type的值來判斷:
- application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數據@RequestParam, @ModelAttribute也可以處理,當然@RequestBody也能處理);
- multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數據);
- 其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數據,必須使用@RequestBody來處理);
B) PUT方式提交時, 根據Request Header Content-Type的值來判斷:
- application/x-www-form-urlencoded, 必須;
- multipart/form-data, 不能處理;
- 其他格式, 必須;
說明:Request的Body部分的數據編碼格式由Header部分的Content-Type指定;
參考:
http://blog.csdn.net/arsenal04/article/details/41484685(以上內容轉自此篇文章,先記錄一下先,待解決)
