Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 读取apache HttpClient响应两次_Spring Boot_Httpclient_Inputstream_Aop - Fatal编程技术网

Spring boot 读取apache HttpClient响应两次

Spring boot 读取apache HttpClient响应两次,spring-boot,httpclient,inputstream,aop,Spring Boot,Httpclient,Inputstream,Aop,我们正在使用ApacheHttpClient向第三方发送请求。 我使用了AOP on execute()方法来记录请求和响应 在使用aop记录响应时,我正在编写以下代码 AOP类别代码: private void logResponse(对象响应、记录器、长启动时间)抛出ParseException、IOException{ if(HttpResponse的响应实例){ HttpResponse HttpResponse=(HttpResponse)响应; if(httpResponse.get

我们正在使用ApacheHttpClient向第三方发送请求。 我使用了AOP on execute()方法来记录请求和响应

在使用aop记录响应时,我正在编写以下代码

AOP类别代码:

private void logResponse(对象响应、记录器、长启动时间)抛出ParseException、IOException{
if(HttpResponse的响应实例){
HttpResponse HttpResponse=(HttpResponse)响应;
if(httpResponse.getEntity()!=null){
字符串日志=EntityUtils.toString(
httpResponse.getEntity().getContent()//错误代码。再次读取流。
);
返回mapper.getObjectFromJson(result,responseClassOfType);
}
}
类ClientWrapper{
公共HttpResponse sendRequest(HttpClient HttpClient,HttpRequestBase请求)引发IOException{
返回httpClient.execute(请求);
}
}
有许多帖子可以两次读取输入流,但我还没有发现任何适合我的相关ans

我的请求-响应日志记录方式正确吗? 或者是否有其他更好的方法可以使用httpClient记录请求和响应

请帮忙

PS:1.我们不希望在我们的logback xml文件中使用
,因为生成的日志在kibana中没有正确显示

  • 我无法更改连接器类方法

  • 有很多帖子可以读取输入流两次,但我没有发现任何相关的ans适合我的情况。为什么这些对你不起作用?@Alan Hay他们都建议将输入流转换为字节数组,并使用这个缓存的字节数组重新创建输入流。正如我提到的,我无法更改连接器类代码,那么这有什么帮助呢我?你没有显示方面的切入点,但是拦截
    HttpResponse.getEntity()
    HttpEntity.getContent()怎么样
    而不是现在截取的内容,然后在读取实体时只记录实体?这样可以避免读取实体的输入流两次。或者在通过
    mapper.getObjectFromJson(..)将流内容转换为Json之前截取流内容。