標籤:內容 blog request請求 部分 over enc 記憶體溢出 sdn property
最近用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(以上內容轉自此篇文章,先記錄一下先,待解決)
https://stackoverflow.com/questions/29527803/eliminating-or-understanding-jetty-9s-illegalstateexception-too-much-data-aft
Jetty錯誤: badMessage: java.lang.IllegalStateException: too much data after closed for [email protected]{r=2,c=false,a=IDLE,uri=}