【发布时间】:2014-09-23 17:16:44
【问题描述】:
我们有一个 Spring 方法来处理我们遇到的一些问题,具体取决于我们使用的客户端(浏览器与移动应用程序)。我们希望能够看到原始请求和标头,但无法弄清楚如何轻松做到这一点。我们想出的最好办法是在方法中将HttpServletRequest 添加到我们的参数中,并创建一个长方法来打印出请求对象的各个部分。有没有更好的方法比如为某些特定的org.springframework.web.* Spring 类打开调试日志记录?
我们的方法和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的子类之一并适当配置。另请参阅stackoverflow.com/questions/25905296/…。