获取HttpServletRequest中的所有参数

说明:有时在给第三方提供接口时,不知道他们的数据是怎么传过来的,我之前居然遇到一个通过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;
	}
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值