我覆盖了 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");

10-04 12:48