一般而言,get请求是有参数长度限制的,但是post请求没有参数长度限制。但是在实际使用过程中发现ajax请求参数在超过几万个字符之后,在获取java通过getParameter获取参数时,往往数据变成了空值(null),如果是使用spring mvc控制器的话,就会直接抛出异常。经过多次实践之后发现,在ajax post请求参数过长的时候,实际请求到的header中参数格式为“参数名=url编码参数值”,这个时候的一个参考解决方案是通过流形式,自动解析参数,参考代码如下:
@ResponseBody
@RequestMapping(value = "/createMap")
public String createpicture(
/*@RequestParam("editrow") String strEditRow,*/
HttpServletRequest request,
HttpServletResponse response) throws IOException {
String strEditRow=getRequestContentParam(request);
return ccp.createPicture(strEditRow,response,childTable);
}
public static String getRequestContentParam(HttpServletRequest request) throws IOException{
String strEditRow="";
request.setCharacterEncoding("utf-8");
StringBuilder sb = new StringBuilder();
BufferedReader reader = request.getReader();
char[] buff = new char[1024];
int len;
while((len = reader.read(buff)) != -1) {
sb.append(buff,0, len);
}
String content =sb.toString();
if(StringUtil.IsNotNullOrEmpty(content) && content.startsWith("editrow=")){
content=content.substring(8);
}
String ENCODE = "UTF-8";
strEditRow = java.net.URLDecoder.decode(content, ENCODE);
System.out.println(strEditRow);
return strEditRow;
}