angularjs发送post请求,servlet无法用getParameter(name)获取的解决方法,亲测有效

来源:互联网 发布:数据时代的利与弊作文 编辑:程序博客网 时间:2024/05/18 18:18

初始请求如下所示,servlet无法获取参数值

$http({

method : "POST",
url : url,
data:data
}).success(function(data, status, headers, config) {
//....
 })


当post请求的Content-Type为application/x-www-form-urlencoded,参数是在请求体中,即Form Data中.
这时tomcat依据Content-Type值认为数据格式是key-value,在获取请求参数后会对参数做特殊处理,放到request对象的parameterMap中,
servlet用getParameter(name)就可以从map中获取相应参数的值.


那么发送post请求时,content-type默认是text/plain,参数在RequestPayload中,此时数据格式是不确定的,tomcat就
不会对参数做特殊处理,servlet就无法从map中获取参数的值.


一.在后端让servlet用getParameter(name)读取参数可以在前端做修改实现
1.在$http中设置Content-Type为application/x-www-form-urlencoed,并用$.param(data)处理要传输的参数,

   headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
   data : $.param(data),

如果用$http.post发送,可以在postCfg中设置headers,transformRequest实现相同的效果

 二.如果前端不方便改动,也可以修改后端代码获取到需要的参数:当无法读取ParameterMap获取参数时,可以直接读取request中的
 输入流,自己手动解析参数:
 private String getRequestPayload(HttpServletRequest request){
StringBuilder builder = new StringBuilder();

try{
BufferedReader reader = request.getReader();
char[] buff = new char[1024];
int len = 0;
while((len=reader.read(buff))!= -1){
builder.append(buff,0,len);
}
}catch(Exception e){
//.....
}
return builder.toString();

}

0 0
原创粉丝点击