Jetty錯誤: badMessage: java.lang.IllegalStateException: too much data after closed for HttpChannelOverHttp@472adad9{r=2,c=false,a=IDLE,uri=}


最近用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 

作用: 

  1. 該注解用於讀取Request請求的Body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然后把相應的數據綁定到要返回的對象上;
  2. 再把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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM