请求后台controller的时候经常需要传递参数过来。当请求方式为GET 的时候就可以很容易的获取到参数,通过request对象即可。
//参数名称为departmentId
int departmentId=request.getParameter("departmentId");</span>
当使用 GET 传输的时候就可以采用上述的方式获取,但是GET传输是将参数直接拼接在URL后面,通过地址栏传输,一些敏感的参数会直接暴漏同时GET传输对于参数的长度也有所限制,所以很多时候需要我们通过POST传输,而当利用上面的方法获取POST传输的参数就会发现我们获取到的都是null;所以,分享一下POST获取参数的方式。
可以通过HTTP协议将参数转换为JSONObject,然后获取POST传递的参数。
public class HTTPUtil {
/*
*将post请求的json字符串格式的参数转为JSONObject
*/
public static JSONObject httpProcess(HttpServletRequest request,HttpServletResponse response) throws IOException, JSONException{
StringBuffer sb = new StringBuffer() ;
InputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
String s = "" ;
while((s=br.readLine())!=null){
sb.append(s) ;
}
if(sb.toString().length()<=0){
return null;
}else {
return new JSONObject(sb.toString());
}
}
然后在获取参数的时候就可以直接调用该方法获取:
JSONObject js=HTTPUtil.httpProcess(request, response);
if(js==null){
out.print("no paramters");
}
String departmentId=js.optString("departmentId");
String telphone=js.optString("telphone");
这样就可以解觉POST传输参数request.getParameter()无法获取的问题了。
--------------------------------------------------------------------------------------------------------------------------------------------------------
如果使用request对象获取post参数,最近新发现了一个简单的方式,即:
在使用ajax请求接口时,或者使用psoter或postman测试接口的时候,只需要将请求头里的content-type设置为application/x-www-form-urlencoded,request对象中就会有值,这样无论是通过request.getParameter还是通过@RequestParam都可以获取到post传递过来的值。