我覆盖了 FilterClient
,因此可以看到传入的请求。我想要某种方式来获取传入的 String
的ActionRequest
表示形式。ActionRequest
让我们编写 StreamOuput
,它是Elasticsearch类型,是 OutputStream
的子类。此SO post显示了如何将OutputStream
转换为字符串,但是由于StreamOuput
API,我不得不使用FilterClient
。
如何获得ActionRequest
的字符串表示形式或至少一个可读的版本,该版本将向我显示有关请求的有用信息? (调用ActionRequest.toString
会调用Object.toString
,这对我来说还不够好。)
最佳答案
StreamOutput
是一个抽象类,它具有一个名为OutputStreamStreamOutput
的子类。后者基本上是OutputStream
的包装,因此您将创建一个包装ByteArrayOutputStream
的实例,然后在ActionRequest.writeTo()
调用中使用它。
// in your override doExecute method, add this:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStreamStreamOutput osso = new OutputStreamStreamOutput(baos);
request.writeTo(osso);
String requestAsString = baos.toString("UTF-8");