spring mvc接受post数据过大,参数获取为空的解决方法

最近用jetty  跑spring mvc接收post请求(post中数据很大)。出现数据无法获取到的问题。

如 

@RequestMapping(value = "/receive", method = RequestMethod.POST)

public receive(String a,String b,String c) 

其中 a是从post中获取,先前数据量小的时候,可以取到没有问题。

我加了一个判断,如果a为null就记日志,结果····全部都是null...一堆日志


JETTY和TOMCAT下,都出现这个问题。  jetty下会报错 

WARN:oejh.HttpParser:qtp1359061041-19: badMessage: java.lang.IllegalStateException: too much data after closed for HttpChannelOverHttp@7fd0cbe{r=5,a=IDLE,uri=-}
类似这个。网上找了好久解决方案,大都集中在修改jetty.xml中的配置。

用抓包工具看,发现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不报了,可是依然还是取不到要的参数。······ps,调得很大还有内存溢出,还得调小其他参数,如线程数。

改变方式修改Content-Type 为 application/x-www-form-urlencoded 或multipart/form-data,一样没有效果。

试过多种方式后,我使用 @RequestBody 注解了 a,结果···成功了。而且···不需要调整jetty的参数。


 为什么用@RequestBody,看看解释吧


以下为其他网址复制,请谨慎查看呢


@RequestBody

作用: 

      i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;

      ii) 再把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指定;







  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值