2014-09-23 34 views
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) + "'"); 
    } 
} 
+0

註冊'AbstractRequestLoggingFilter'的一個子類並進行相應的配置。另見http://stackoverflow.com/questions/25905296/how-to-log-httprequest-and-httpresponse-in-a-file/25906059#25906059。 – 2014-09-23 17:58:29

回答

1

你提出的解決方案是多還是少,你可以用這個Servlet API(Spring的MVC是建立在做最好的,所以它不提供任何東西更多)。

根據您使用的是哪個Servlet容器,它們可能已經有了一個可以使用的實現。例如,Tomcat提供org.apache.catalina.filters.RequestDumperFilter請求和響應信息。

相關問題