HttpServletRequestリクエストの本文のコンテンツを取得します



Get Content Body Httpservletrequest Request



実際の開発プロセスでは、多くの場合、HttpServletRequestからHTTPリクエストの本文の内容を読み取る必要があります。ことわざにあるように、「良い記憶は悪い書き込みほど良くはない」、これがそれを読む方法です。
import java.io.BufferedReader import java.io.IOException import java.io.InputStream import javax.servlet.ServletInputStream import javax.servlet.http.HttpServletRequest public class HttpServletRequestReader { // String reading // method one public static String ReadAsChars(HttpServletRequest request) { BufferedReader br = null StringBuilder sb = new StringBuilder('') try { br = request.getReader() String str while ((str = br.readLine()) != null) { sb.append(str) } br.close() } catch (IOException e) { e.printStackTrace() } finally { if (null != br) { try { br.close() } catch (IOException e) { e.printStackTrace() } } } return sb.toString() } // Method Two public static void ReadAsChars2(HttpServletRequest request) { InputStream is = null try { is = request.getInputStream() StringBuilder sb = new StringBuilder() byte[] b = new byte[4096] for (int n (n = is.read(b)) != -1) { sb.append(new String(b, 0, n)) } } catch (IOException e) { e.printStackTrace() } finally { if (null != is) { try { is.close() } catch (IOException e) { e.printStackTrace() } } } } // Binary read public static byte[] readAsBytes(HttpServletRequest request) { int len = request.getContentLength() byte[] buffer = new byte[len] ServletInputStream in = null try { in = request.getInputStream() in.read(buffer, 0, len) in.close() } catch (IOException e) { e.printStackTrace() } finally { if (null != in) { try { in.close() } catch (IOException e) { e.printStackTrace() } } } return buffer } } 注意: HttpServletRequestリクエストの本文コンテンツは呼び出すことしかできません request.getInputStream()、request.getReader()およびrequest.getParameter( 'key') メソッドは1回読み取られ、繰り返し読み取るとレポートされますjava.io.IOException:ストリームが閉じられました異常な。