如何记录 RESTful 帖子数据?

2022-09-04 06:08:48

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

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

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


答案 1

将以下内容添加到表示应用程序配置的类中:

import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.filter.AbstractRequestLoggingFilter;

....

@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;
}

您可能需要注释掉

   f.setIncludePayload(true);

答案 2

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

Spring包含 AbstractRequestLoggingFilter,它可以做类似的事情。虽然它不能直接适合您的问题,但您可以将其用作实现自己的筛选器的参考。