如何记录RESTful帖子数据?

Tom*_*ton 11 java rest logging spring

我们通过Spring MVC公开了REST服务.我们使用a HandlerExceptionResolver来记录异常.我们目前记录以下内容:

  • 异常及其堆栈跟踪
  • 网址
  • 请求标头

如果我们也可以记录JSON帖子数据,它将使调试更容易.关于如何获得这个的任何建议?

nyx*_*xee 18

将其添加到表示应用程序配置的类中:

import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.filter.AbstractRequestLoggingFilter;
Run Code Online (Sandbox Code Playgroud)

....

@Bean
public Filter loggingFilter(){
    AbstractRequestLoggingFilter f = new AbstractRequestLoggingFilter() {

        @Override
        protected void beforeRequest(HttpServletRequest request, String message) {
            System.out.println("beforeRequest: " +message);
        }

        @Override
        protected void afterRequest(HttpServletRequest request, String message) {
            System.out.println("afterRequest: " +message);
        }
    };
    f.setIncludeClientInfo(true);
    f.setIncludePayload(true);
    f.setIncludeQueryString(true);

    f.setBeforeMessagePrefix("BEFORE REQUEST  [");
    f.setAfterMessagePrefix("AFTER REQUEST    [");
    f.setAfterMessageSuffix("]\n");
    return f;
}
Run Code Online (Sandbox Code Playgroud)

你可能要评论出来

   f.setIncludePayload(true);
Run Code Online (Sandbox Code Playgroud)


axt*_*avt 10

您需要一个过滤器,可以在读取时保存请求体,并在以后将保存的数据提供给您的异常记录器.

Spring包含AbstractRequestLoggingFilter了类似的东西.虽然它不直接适合您的问题,但您可以将其用作实现自己的过滤器的参考.

  • @LászlóvandenHoek,你能详细说明一下吗?我不跟着你。我正在使用“ContentCachingRequestWrapper”,但请求正文始终是空字符串。 (2认同)

Sha*_*med 6

没有简单的方法来记录请求/响应的负载。您可以使用 Java Web 过滤器拦截所有请求和响应,并从流中读取 JSON 数据。但是有一个问题,当您从流中读取数据时,实际数据将从流中耗尽。

因此,您必须实现实际请求和响应对象的包装器。只会记录请求响应的复制版本。我们已经实施了类似的解决方案,如下所示,它满足了我们的要求:

http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431

http://angelborroy.wordpress.com/2009/03/04/dump-request-and-response-using-javaxservletfilter/