背景
在Web项目中,有时需要手动获取 HttpServletReqeust中的请求参数,进行个性化处理或分析;比如在日志记录中需要获取请求参数;
这里展示两种获取请求参数的方式: 方式一:
/** * 将浏览器参数存储到Map,对GET请求进行中文乱码处理 * * @param request * @return */ public static Map<String, Object> getParamsMap(HttpServletRequest request) { Map<String, Object> paramMap = new HashMap<>(); String method = request.getMethod(); Enumeration<?> keys = request.getParameterNames(); while (keys.hasMoreElements()) { Object key = keys.nextElement(); if (key != null) { if (key instanceof String) { String value = request.getParameter(key.toString()); if ("GET".equals(method)) { try { value = new String(value.getBytes("ISO-8859-1"), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } paramMap.put(key.toString(), value); } } } return paramMap; }
方式二:
/** * 获取 @RequestBody 相关参数 * * @param request * @return */ public static JSONObject getParamsJson(HttpServletRequest request) { StringBuilder param = new StringBuilder(); try { BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8)); String line; while ((line = reader.readLine()) != null) { param.append(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } JSONObject jsonObject = JSONUtil.parseObj(param.toString()); return jsonObject; }