将有效载荷数据从输出流传输到HttpRequestBody

时间:2017-12-13 10:00:05

标签: java jackson httpclient

在我们的应用程序中,到目前为止,我们正在向这样的地方发出HttpPost请求

 HttpResponse makeRequest(String payload) {

     HttpPost request = new HttpPost();
     request.setEntity(new StringEntity(payload));
     //Set headers etc
     return this.httpClient.execute(request);
 }

我们的有效负载完全是JSON,我们使用JacksonLibrary来处理JSON转换。 (序列化和反序列化)。在我们的性能测试期间,我们观察到将一个对象序列化为一个字符串(有效负载),并且httpClient获取该有效负载并发出请求需要花费大量时间。 Jackson提供了一个工具,可以直接将字符串写入输出流/写入器。 (流媒体的种类)。

有什么方法可以配置HttpRequestBase / HttpPost等来使用来自该输出流的响应作为有效负载输入? - >我认为Piping输出流到输入流将起作用,但是没有暴露的功能来设置HttpRequest的输入流。

1 个答案:

答案 0 :(得分:0)

我怀疑有一种合理的方式来进行流式传输,但是改进它的一种方法是使用writeValueAsBytes并通过httpclient发布字节 - 它不会执行unessesary convertion bytes-> chars-> bytes。

你也说“将对象序列化为字符串(有效负载) httpClient获取有效负载使请求花费大量时间“ - 太多事情无法得出任何结论。您需要更精确地调查才能找到确切的瓶颈。例如。可能你只是没有正确使用杰克逊,例如在这里:https://theartofdev.com/2014/07/20/jackson-objectmapper-performance-pitfall/

相关问题