我们有一个处理REST调用的Spring方法,但是我们在使用不同客户端(浏览器 vs 移动应用)时会遇到一些问题。我们希望能够查看原始请求和标头,但是我们还没有找到如何轻松实现这一点的方法。目前最好的解决方案是将
下面是我们方法的编辑版本和
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
的子类之一,并适当地配置它。另请参阅 https://dev59.com/M4Pba4cB1Zd3GeqPs4C6#25906059。 - M. Deinum