解决action请求链接过长,参数过长

 解决方法是使用JSON格式传递参数,但要注意JSON格式的后台获取的方法
正常的post请求(不包括ajax请求)在http头中的content-type为application/x-www-form-urlencoded,这时在java后台可以通过request.getParameter(name)的形式获取.但是通过原生ajax请求时,在java后台通过request.getParameter(name)的形式却无法获取到传入的参数.

原因是原生ajax请求时,在http头中的content-type为text/plain;charset=UTF-8.当请求到达tomcat服务器时,服务器只对application/x-www-form-urlencoded形式的http,post请求进行读取body体中的参数,并放到request的parameter中,对于原生ajax请求则直接忽略,不会读取body体中的参数,才导致request.getParameter(name)读取不到参数.

这样有两种方式解决

第一种,通过json传递数据,在java后台,用下面java代码读取RequestPayload的参数,就可以获取到传入的参数

// 前台

jQuery.ajax({

url: url,                // 访问地址

type: "POST",    // post提交

data: JSON.stringify(parm),  // 对象参数转换json格式字符串

contentType: "application/json;charset=UTF-8",   // http content type

dataType: "json",                        // 指定json格式

success: function (data) {

    // do success

},

error: function (error) {

   //do error

}

});


// 后台-获取到的是多个参数的json格式字符串,通过gson转换成map对象,即可以通过键值对方式去的想要的参数

public String getRequestPayload(HttpServletRequest req) {

        StringBuilder sb = new StringBuilder();

        try {

        BufferedReader reader = req.getReader();

char[]buff = new char[1024];

int len;

while((len = reader.read(buff)) != -1) {

        sb.append(buff,0, len);

}

        } catch (IOException e) {

        e.printStackTrace();

        }

        return sb.toString();

}

第二种, 在前台传递参数的时候用对象,并指定content-type为application/x-www-form-urlencoded

// 前台

var parm = {

param1 : "1",

param2 : "2"

};


jQuery.ajax({

url: url,                // 访问地址

type: "POST",    // post提交

data: parm,  // 对象转json字符串参数

contentType: "application/x-www-form-urlencoded",   // http content type

success: function (data) {

       // do success

},

error: function (error) {

      //do error

}

});

后台通过request.getParameter(name)方式就可以获取到参数.

你可能感兴趣的:(JAVA开发过程记录)