问题场景
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()