Spring boot 读取apache HttpClient响应两次
我们正在使用ApacheHttpClient向第三方发送请求。 我使用了AOP on execute()方法来记录请求和响应 在使用aop记录响应时,我正在编写以下代码 AOP类别代码: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
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之前截取流内容。
。