在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 ; }
