2
我们有一个Spring方法来处理REST调用,根据我们使用的客户端(浏览器vs移动应用程序),我们遇到了一些问题。我们希望能够看到原始请求和标题,但无法弄清楚如何轻松地做到这一点。我们提出的最好的方法是将HttpServletRequest
添加到方法中的参数中,并创建一个很长的方法来打印请求对象的各个部分。有没有更好的方法,比如打开一些特定的弹簧类的调试日志记录?如何记录Spring @RestController @RequestMapping方法的所有请求和头信息?
我们的方法的一个编辑的版本和printRequestInfo()
方法是:
@RequestMapping(method = RequestMethod.POST, value = "/test/{testId}")
public void doSomething(@PathVariable Long testId,
@RequestParam(value = "someOtherParam", required = false) String someOtherParam,
HttpServletRequest req)
{
printRequestInfo(req);
// ...
}
private void printRequestInfo(HttpServletRequest req) {
StringBuffer requestURL = req.getRequestURL();
String queryString = req.getQueryString();
if (queryString == null) {
logger.info("url: " + requestURL.toString());
} else {
logger.info("url: " + requestURL.append('?').append(queryString).toString());
}
logger.info("method:" + req.getMethod());
// print all the headers
Enumeration headerNames = req.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = (String)headerNames.nextElement();
logger.info("header: " + headerName + ":" + req.getHeader(headerName));
}
// print all the request params
Enumeration params = req.getParameterNames();
while(params.hasMoreElements()){
String paramName = (String)params.nextElement();
logger.info("Attribute: '"+paramName+"', Value: '"+req.getParameter(paramName) + "'");
}
}
注册'AbstractRequestLoggingFilter'的一个子类并进行相应的配置。另见http://stackoverflow.com/questions/25905296/how-to-log-httprequest-and-httpresponse-in-a-file/25906059#25906059。 – 2014-09-23 17:58:29