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

    xiaoxiao2021-04-03  45

    初始请求如下所示,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();

    }

    转载请注明原文地址: https://ju.6miu.com/read-666021.html

    最新回复(0)