HttpServletRequest数据流中读取数据

HttpServletRequest数据流中读取数据

HttpServletRequest数据流只能读取一次,第二次取数据流就已经被读走了。
有时一种方式会读取不出来,换一种方式读取时先判断流是否为空;null != request.getParamterNames()

枚举取

if (null == jsonObject || null != request.getParameterNames()) {
            Enumeration enu = request.getParameterNames();
            while (enu.hasMoreElements()) {
                String paraName = (String) enu.nextElement();
                logger.info("modelId={},回调参数paraName={},回调参数值={}", payRequestModelVO.getPayModelId(), paraName, request.getParameter(paraName));
                jsonObject = JSON.parseObject(json);
            }
        }

readLine

public static String getInputStream(HttpServletRequest request) throws Exception {
		ServletInputStream stream = null;
		BufferedReader reader = null;
		StringBuffer sb = new StringBuffer();
		try {
			stream = request.getInputStream();
			// 获取响应
			reader = new BufferedReader(new InputStreamReader(stream));
			String line;
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
		} catch (IOException e) {
			logger.error(e);
			throw new DescribeException("读取返回支付接口数据流出现异常!", -1);
		} finally {
			reader.close();
		}
		logger.info("输入流返回的内容:" + sb.toString());
		return sb.toString();
	}

2019年9月27日19:28:16 自己试验

get请求:
	readLine:   无值
	枚举:    	有值


post(form):
	readLine:   无值
	枚举:		有值

post(json):   {"aaaa":"11111","bbbbbb":"22222222","v":"5555"}
	readLine:   有值
	枚举:		无值

json、xml式的请求用流readLine,get式或者post(application/x-www-form-urlencoded)用枚举取,以免用同一种方式取不到值。

你可能感兴趣的:(java)