Java servlet中使用getInputStream()获取post请求参数失败原因及解决方案

本文讲述了在Servlet中,如何避免因为规范限制导致的不能同时使用getParameter()获取URL参数和getInputStream()获取POST请求体的问题。提出解决方案是在调用getParameter()后处理InputStream,以及何时选择使用request.getInputStream()获取JSON数据。
摘要由CSDN通过智能技术生成
问题场景
servlet中使用getParameter()方法获取数据后再使用getInputStream()方法无法获取post请求中body的内容
问题原因
servlet规范:同时满足下列条件,则请求体中的数据将被填充到Parameter集合中
 1. 是一个http/https请求
 2. 请求方法是post
 3. 请求类型(content-Type)是application/x-www-form-urlencoded
 4.  Servlet调用了getParameter系列方法
 
由此可以了解到:
	如果上述条件没有同时满足,则相关的表单数据不会被设置进request的parameter集合中,
	相关的数据可以通过request.getInputStream()来访问。
	反之,如果上述条件均满足,相关的表单数据将不能再通过request.getInputStream()来读取。
解决方案
把request.getParameter(参数名称);放到request.getInputStream()方法之后,
这样就回避了servlet的规范,可以正常获取想要的参数值了。
其它补充
request.getParameter(参数名称)来获取url上面或者ajax.data提交上来的参数;

request.getInputStream()(io流)方法来获取body中的内容,获取的是一个json串,
再使用JSONObject.fromObject(json串);即可解析到里面各个参数的值。

什么时候使用request.getInputStream()?
例如用httpClient中的httpPost.setEntry()的方法提交的参数是没有参数名称的, 
使用request.getParameter(参数名称)便无法获取参数值,我们可以用request.getInputStream()
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

menglixiazhiweizhi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值