2 hc1515014471 hc1515014471 于 2016.04.19 16:38 提问

servlet 麻烦大家帮我看看下面代码有什么问题?

String clinetToken = request.getParameter("token");
if(clinetToken == null){
String jsonStr = request.getReader().readLine();
JSONObject json = new JSONObject(jsonStr);
clinetToken = (String) json.get("token");
if(clinetToken == null){

return true;
}
}

程序运行报“getReader() has already been called for this request”的错误,请问怎么修改?

2个回答

hc1515014471
hc1515014471   2016.04.19 16:46

请求的参数是整个RequestBody

niaonao
niaonao   Rxr 2016.04.19 17:07

getreader()已经称为该请求
request.getParameter("token");已经请求过一次
request.getParameter()、 request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。
先通过调用request.getParameter() 方法得到参数后,再调用request.getInputStream()或request.getReader()已经得不到流中的内容,因为在调用 request.getParameter()时系统可能对表单中提交的数据以流的形式读了一次,反之亦然。

niaonao
niaonao @RequestBoBy不能处理二进制流multipart/form-data,除去这种格式,其他格式@RequestBoBy都支持
一年多之前 回复
niaonao
niaonao request.getParameter("json"); request.getParameter("token");这是获取两个不同的数据,也没有用getReader()啊
一年多之前 回复
hc1515014471
hc1515014471 String json = request.getParameter("json");这样获取不到值,controller中用了@RequestBoBy
一年多之前 回复
hc1515014471
hc1515014471 getParameter()与getReader()方法不能同时调用 ,你这样不是同时在调用?
一年多之前 回复
niaonao
niaonao String json = request.getParameter("json");和获取token一样
一年多之前 回复
hc1515014471
hc1515014471 我要把ajax传过来的json取到
一年多之前 回复
hc1515014471
hc1515014471 那请问这里有什么改进的方法呢?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!