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请求的参数

猜你喜欢

转载自blog.csdn.net/qq_35939864/article/details/81938101