私はJettyを使用しており、リクエストのパラメータと本文を記録したいと思います。ハンドラにJetty RequestLog - 読書リクエストボディを発行
追加AccessLogger:私はrequest.getReader()
を実行しようとすると
@Override
public void log(Request request, Response response) {
request.getReader();
}
問題がある、それはIllegalStateException: STREAMED
を言うこと:
AccessLoggerはRequstLogインタフェースを実装しています。以前のハンドラがすでにすべてのデータを読み込んでいるからだと思います。しかし、私はそれを必要な方法でどのようにログに記録できますか?
はい、それは私が想定したものです。しかし、この場合の回避策は何ですか?複数のハンドラが存在する可能性がある場合は、すべてリクエストから読み取ることができるはずです。 – awfun
いいえ、サーブレット仕様ではサポートされていません。その必要がある場合は、コンテンツをどこかに読み込んでキャッシュする必要があり(ディスク上で推薦する)、後続の各サーブレットはキャッシュされたバージョンにアクセスする必要があります(サーブレットAPI経由ではありません)。 Servlet 3.1とAsync I/Oが仕様に追加されて以来、HttpServletRequestをオーバーライド/ラップする複雑なものを考え出すことができます。 –