request.getReader().readLine()取不到值
今天通过ajax通过data传输json数据格式的数据时,发现readLine()方法只执行了一次,而且取到的值为空
jsp页面部分代码:
//下面的代码中的url经测试,能访问servlet到,而且其中的“optionType”参数也能在servlet读取到值
function onAfterCusEdit(rowIndex,rowData,changes){
//重新拼接json字符串,使之成为一个数组
if("{}"!=JSON.stringify(changes)){
var newJsonArray = "{'cus_id':'"+rowData.cus_id+"','data':'"+JSON.stringify(changes)+"'}";
alert(newJsonArray);
alert(optionType);
// 通过jQuery的ajax方法传递修改好的数据
$.ajax({
type:"POST",
url:"${projectName}/ManagerOpCusServlet?optionType="+optionType,
data:newJsonArray,
error:function(){
alert("无法请求指定的servlet");
}
});
}else{
$('#'+idType+'_table').datagrid('reload');
}
}
servlet核心代码:
// 获取“用户管理”表单的操作类型
String optionType = request.getParameter("optionType");
// 将获取optionType进行转码
//optionType = URLDecoder.decode(optionType, "UTF-8");
optionType=new String(optionType.getBytes("ISO-8859-1"),"UTF-8");
// 创建对应的service对象
ManagerService ms = new ManagerServiceImp();
// 设定影响行数
int lineNumber = 0;
if ("新增".equals(optionType)) {
String jsonString = JsonFormatC.getJsonString(request.getReader());
System.out.println(jsonString);
Customer cus = JSON.parseObject(jsonString,Customer.class);
System.out.println(cus.toString());
//调用增加客户的方法
lineNumber = ms.addOneCustomer(cus);
//显示影响数据库的行数
DataBaseUtils.showDB_LN(lineNumber);
//将影响行数返回添加界面,告诉用户有没有返回成功
PrintWriter pw = response.getWriter();
//返回界面数据
pw.print(lineNumber);
//清空数据流,确保数据输出
pw.flush();
//关闭输出流
pw.close();
工具类代码:
public class JsonFormatC {
public static String getJsonString(BufferedReader reader){
//接受请求数据
StringBuffer json = new StringBuffer();
//获取请求头对象,页面信息存放在请求头里面
//BufferedReader reader = request.getReader();
String line = null;
//循环调用readLine方法将reader中的每条不为null,类型为“String”数据放入json中
try {
while(null!=(line=reader.readLine())){
json.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将数据存完后再将StringBuffer转为String类型
//String jsonCustomer = json.toString();
return json.toString();
}
}