当前位置: 首页 > 知识库问答 >
问题:

Spring ClientHttpRequest estInterceptor请求/响应空

林冥夜
2023-03-14

我想获取REST请求和响应主体,以便在我的应用程序中进行日志记录。

我目前有一个loggingRequest estInterceptor类,它实现了ClientHttpRequest estInterceptor,与这里sofiene的答案非常相似。

然后,我在spring配置的Rest模板中添加了这个拦截器作为属性。

我的代码如下所示:

public class LoggingRequestInterceptor implements ClientHttpRequestInterceptor {

private static final Logger logger = LoggerFactory.getLogger(LoggingRequestInterceptor.class);
 @Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {

    ClientHttpResponse response = execution.execute(request, body);

    response = log(request, body, response);

    return response;
}

private ClientHttpResponse log(final HttpRequest request, final byte[] body, final ClientHttpResponse response) throws IOException {
    final ClientHttpResponse responseCopy = new BufferingClientHttpResponseWrapper(response);
    StringBuilder builder = new StringBuilder();
    builder.append("Method: ").append(request.getMethod().toString());
    builder.append("URI: ").append(request.getURI().toString());
    builder.append("Request Body: ").append(new String(body,"UTF-8"));
    builder.append("Response body: ").append(convertStreamToString(responseCopy.getBody()));
    logger.info(builder.toString());
    return responseCopy;
    }
}

我的RestTemplate上的Spring属性:

 <property name="interceptors">
        <list>
            <bean class="com.company.projectName.service.api.rest.io.impl.LoggingRequestInterceptor" />                       
        </list>
    </property>

但是,在我所有的rest调用中,我都会记录方法和URI,但正文和响应正文是空的。从请求和响应中获取正文以允许我的应用程序记录此信息的正确方法是什么。

共有1个答案

羊光辉
2023-03-14

解决方案:首先,请求正文为空,因为这是一个GET方法。其次,我还需要记录ResponseStatusCode,因为我接收到的状态为204,没有内容,因此导致响应正文为空。

 类似资料:
  • 介绍 YurunHttp 的请求响应类,结果类。除了遵循 PSR-7 规范,另外还增加了一些人性化的方法。 类:Yurun\Util\YurunHttp\Http\Response use Yurun\Util\HttpRequest; $http = new HttpRequest; $response = $http->get('http://www.baidu.com'); 方法 响应内

  • 概述 Django 使用Request 对象和Response 对象在系统间传递状态。 当请求一个页面时,Django会建立一个包含请求元数据的 HttpRequest 对象。 当Django 加载对应的视图时,HttpRequest 对象将作为视图函数的第一个参数。每个视图会返回一个HttpResponse 对象。 本文档对HttpRequest 和HttpResponse 对象的API 进行说

  • gRPC 1.1.0 C#。NET 4.6 Windows 7/Windows 10 我刚刚在C#中测试了gRPC的性能,对它在计算机之间的性能感到困惑。小消息需要一致的200ms发送/回复时间,而较大的消息(大约1500个字符)是亚毫秒。请参阅下面的客户端/服务器代码。处理小消息是否需要额外的配置? 我的测试遵循以下入门指南:http://www.grpc.io/docs/quickstart/

  • 在SpringMVC项目中,客户机发送一个带有序列化对象的请求,客户机本身是一个小程序,所以它不希望收到一个web页面作为响应,而是一个带有字符串对象的响应,该响应将告诉他这是成功还是失败。那么解决方案是什么呢?我想在@Controller中使用返回void的方法,或者返回不存在页面的方法?(在这两种情况下,我还想知道是否有回复给客户)

  • HTTP请求和HTTP响应在任何Web应用程序中都发挥着重要作用。 我们需要获取http请求的完整详细信息以便正确处理它。 处理完毕后,我们需要通过http响应将处理后的数据发送给客户端。 FuelPHP提供了出色的Request和Response类,分别用于读写HTTP请求和HTTP响应。 让我们在本章中了解Request和Response类。 Request 在典型的Web应用程序中,应用程序

  • 由于客户端身份验证被用作授权许可,所以不需要其他授权请求。