在servlet、filter等中获取POST请求的参数
- form表单形式提交post方式,可以直接从 request 的 getParameterMap 方法中获取到参数
- JSON形式提交post方式,则必须从 request 的 输入流 中解析获取参数,使用apache commons io 解析
maven配置
<!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.50</version> </dependency>
获取POST请求中的参数
/** * @author tianwyam * @description 从POST请求中获取参数 * @param request * @return * @throws Exception */ public static Map<String, Object> getParam4Post(HttpServletRequest request) throws Exception {
// 返回参数 Map<String, Object> params = new HashMap<>(); // 获取内容格式 String contentType = request.getContentType(); if (contentType != null && !contentType.equals("")) { contentType = contentType.split(";")[0]; } // form表单格式 表单形式可以从 ParameterMap中获取 if ("appliction/x-www-form-urlencoded".equalsIgnoreCase(contentType)) { // 获取参数 Map<String, String[]> parameterMap = request.getParameterMap(); if (parameterMap != null) { for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { params.put(entry.getKey(), entry.getValue()[0]); } } } // json格式 json格式需要从request的输入流中解析获取 if ("application/json".equalsIgnoreCase(contentType)) { // 使用 commons-io中 IOUtils 类快速获取输入流内容 String paramJson = IOUtils.toString(request.getInputStream(), "UTF-8"); Map parseObject = JSON.parseObject(paramJson, Map.class); params.putAll(parseObject); } return params ; }