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

來源:互聯網
上載者:User

標籤:內容   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 

作用: 

  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

Jetty錯誤: badMessage: java.lang.IllegalStateException: too much data after closed for [email protected]{r=2,c=false,a=IDLE,uri=}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.