1. 程式人生 > >HttpServletRequest request 獲取請求引數方法

HttpServletRequest request 獲取請求引數方法

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請求的引數