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