如何记录RESTfulpost数据?

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

  • exception及其堆栈跟踪
  • URL
  • 请求标头

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

您需要一个filter,可以在读取时保存请求体,并在以后将保存的数据提供给您的exception记录器。

Spring包含AbstractRequestLoggingFilter ,它执行类似的操作。 虽然它不直接适合您的问题,但您可以将其用作实现自己的filter的参考。

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

 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); 

没有简单的方法来记录请求/响应的有效负载。 您可以使用java Webfilter拦截所有请求和响应,并从流中读取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/