欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

获取HttpServletRequest中的所有参数

程序员文章站 2024-02-18 09:10:28
...

说明:有时在给第三方提供接口时,不知道他们的数据是怎么传过来的,我之前居然遇到一个通过post方式,然后直接把一堆字符串传过来的方式。用postMan找到了那种方式。然后就通过读取流的方式把参数给读取出来了。后来在发现那种类型是text/plain类型,如果换一种方式:application/x-www-form-urlencoded,就不能获取到参数了。所以写了一个简单的方法来获取这些参数。
说明:
经自己测试:
1.application/x-www-form-urlencoded传参,用我下面读流的方式是读取不到参数的。用
【Enumeration enu = request.getParameterNames();】方式,可以获取到。
2.text/plain或者application/json传参,用【request.getParameterNames();】方式是获取参数,能获取到,但是不好处理。通过流的方式,读取成字符串,反而好处理。

代码是基于springMVC的,不过只要是获取request参数,就算是纯servlet,也可以通过这种方式获取request中的参数。然后放到map中,返回。
代码中用到了Gson.jar.
代码如下:
getDataFromRequest是获取参数的方法。

/**
 * 从request中获取所有的参数
 * getDataFromRequest方法是例子
 * @author tianjian
 *
 */
@Controller
@RequestMapping("user")
public class RequestParamGetController {
	
	@RequestMapping("find")
	@ResponseBody
	public Map<String,Object> find(HttpServletRequest request){
		Map<String, Object> result = new HashMap<String, Object>();
		result.put("retCode","200");
		result.put("retMsg","调用成功");
		try {
			Map<String,Object> receiveMap = getDataFromRequest(request);
			System.out.println(receiveMap);
			//对request中的参数进行处理
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 读取request中传过来的字符串
	 * 有些调用方不知道用什么方式调用,可能是【application/x-www-form-urlencoded】、【text/plain】、【application/json】
	 * 该方法都能处理,但是如果是按【application/x-www-form-urlencoded】
	 * @param request
	 * @return
	 * @throws IOException
	 */
	private Map<String,Object> getDataFromRequest(HttpServletRequest request){
		Gson gson = new Gson();
		String type = request.getContentType();
		Map<String,Object> receiveMap = new HashMap<String,Object>();
		if("application/x-www-form-urlencoded".equals(type)){
			Enumeration<String> enu = request.getParameterNames();
			while (enu.hasMoreElements()) {
				String key = String.valueOf(enu.nextElement());
				String value = request.getParameter(key);
				receiveMap.put(key, value);
			}
		}else{	//else是text/plain、application/json这两种情况
			BufferedReader reader = null;
	        StringBuilder sb = new StringBuilder();
	        try{
	            reader = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf-8"));
	            String line = null;
	            while ((line = reader.readLine()) != null){
	                sb.append(line);
	            }
	        } catch (IOException e){
	            e.printStackTrace();
	        } finally {
	            try{
	                if (null != reader){
	                	reader.close();
	                }
	            } catch (IOException e){
	            	e.printStackTrace();
	            }
	        }
	        receiveMap = gson.fromJson(sb.toString(), new TypeToken<Map<String, String>>(){}.getType());//把JSON字符串转为对象
		}
		return receiveMap;
	}
}