我们通过Spring MVC暴露REST服务。 我们使用HandlerExceptionResolver
记录异常。 目前,我们记录以下内容:
- 异常及其堆栈跟踪
- 该网址
- 请求头
它将使调试容易,如果我们还可以在登录后的JSON数据,以及。 任何建议如何获得呢?
我们通过Spring MVC暴露REST服务。 我们使用HandlerExceptionResolver
记录异常。 目前,我们记录以下内容:
它将使调试容易,如果我们还可以在登录后的JSON数据,以及。 任何建议如何获得呢?
你需要一个过滤器,将被真实阅读时,它保存请求的身体,后来提供的数据保存到您的例外记录。
Spring中包含AbstractRequestLoggingFilter
,做了类似的事情。 虽然它不能直接适用于你的问题,你可以使用它作为参考,以实现自己的过滤器。
这种加入代表应用程序的配置类:
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 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/