HttpServletRequestデータストリームでデータを読み出す

7799 ワード

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(appication/x-wn-form-urlencoded)で列挙して取って、同じ方式で値が取れないようにします。