HttpServletRequest request 獲取請求引數方法
阿新 • • 發佈:2018-12-27
HTTP請求解析
HTTP請求一般分為五個部分:①請求方法②請求地址③是協議及版本號④報文頭⑤報文體
重點講報文頭,因為獲取請求引數的方法都是根據報文頭型別不同,獲取的方法不一樣,常
見的頭請求型別主要有這2種:1、application/x-www-form-urlencoded,2、application/json
第一種就是表單請求。第二種是JSON請求。因為流只能讀取一次,所以怎麼同時來相容這兩
種請求方法呢?
public static String getParamRequestStr(HttpServletRequest request){
try {
//獲取application/x-www-form-urlencoded型別的頭請求內容的引數
InputStream inStream = request.getInputStream();
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1 ) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
String result = new String(outSteam.toByteArray(), "utf-8");
//獲取application/json型別的頭請求內容的引數
if(org.apache.commons.lang.StringUtils.isBlank(result)){
Map<String ,String> parmMap=new HashMap<String,String>();
// //方式一:getParameterMap(),獲得請求引數map
// Map<String,String[]> map= request.getParameterMap();
// //引數名稱
// Set<String> key=map.keySet();
// //引數迭代器
// Iterator<String> iterator = key.iterator();
// while(iterator.hasNext()){
// String k=iterator.next();
// parmMap.put(k, map.get(k)[0]);
// }
//方式二:
Enumeration<String> a = request.getParameterNames();
String parm=null;
String val="";
while(a.hasMoreElements()){
//引數名
parm=a.nextElement();
//值
val=request.getParameter(parm);
parmMap.put(parm, val);
}
return JSON.toJSONString(parmMap);
}
return result;
}catch (Exception e){
logger.error("獲取request引數錯誤",e);
}
return null;
}
所以先用來流來讀取,如果讀取不到,再用獲取請求引數名,以上的方法可以同時接收到表單請求跟JSON請求的引數