java通过http的request获取请求参数

说明:今天调研某腾的某产品,通过对方的文档知道可以在对方云平台设置回调地址,但文档里只有一张json格式的参数图,我没法知道对方会以怎样的方式推过来,已经采用了字符串、对象、request.getParameter("")都不能正常获取到参数,直到找到这个针对Http取值有点万能的方法,这里记录下。

/**
	 * 读取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;
	}

各位如果还在为Http传输类型的接口取值方式苦恼,强烈建议采用上述代码片段试试。

原文链接:https://blog.csdn.net/u011321514/article/details/89326677

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章