0

本体を読み込もうとしていますHttpServletRequestが、本体が表示されていません。

以下のHttpServletRequest情報が含まれています。

 body: id=8652976&event=test&payload[chargify]=testing
headers: 
  Content-Type: application/x-www-form-urlencoded
  X-Chargify-Webhook-Signature: ed57683a9d8a3f25869dbf138ce5c66f
  Accept: "*/*; q=0.5, application/xml"
  X-Chargify-Webhook-Id: "8652976"
  Accept-Encoding: gzip, deflate
  Content-Length: "47"

次のコードを使用してリクエスト本文を読み込もうとしています。しかし、inStream.readLine()null値を与えるとき

if ("gzip".equalsIgnoreCase(request.getHeader("Accept-Encoding"))) {

  GZIPInputStream gzipInputStream = new GZIPInputStream(request.getInputStream());
  Reader decoder = new InputStreamReader(gzipInputStream, "UTF-8");
  BufferedReader br = new BufferedReader(decoder);
  String inputLine;
  while ((inputLine = br.readLine()) != null) {
    body.append(inputLine).append(System.getProperty("line.separator"));
  }
   gzipInputStream.close();
 } else {
    InputStreamReader input = new InputStreamReader(request.getInputStream());
    BufferedReader inStream = new BufferedReader(input);
    String inputLine;
    while ((inputLine = inStream.readLine()) != null) {
        body.append(inputLine).append(System.getProperty("line.separator"));
    }
    inStream.close();
}
4

1 に答える 1

0

このボイラープレートコードすべてを処理して節約するためのはるかに簡単な方法があります。

ドキュメント については、Apache commons-fileupload を確認してください

このライブラリを使用するのがいかに簡単かを示すサンプル コードを次に示します。

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();

// Parse the request
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
    FileItemStream item = iter.next();
    String name = item.getFieldName();
    InputStream stream = item.openStream();
    if (item.isFormField()) {
        System.out.println("Form field " + name + " with value "
            + Streams.asString(stream) + " detected.");
    } else {
        System.out.println("File field " + name + " with file name "
            + item.getName() + " detected.");
        // Process the input stream
        ...
    }
}
于 2013-03-06T08:38:04.333 に答える