说明:今天调研某腾的某产品,通过对方的文档知道可以在对方云平台设置回调地址,但文档里只有一张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