【问题标题】:How can I log all of the request and header information for a Spring @RestController @RequestMapping method?如何记录 Spring @RestController @RequestMapping 方法的所有请求和标头信息?
【发布时间】: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) + "'");
    }
}

【问题讨论】:

标签: java spring rest request


【解决方案1】:

我找不到其他方法。

private Map<String, String> getRequestInformation(HttpServletRequest request) {
    Map<String, String> map = new HashMap<String, String>();
    Enumeration headerNames = request.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String key = (String) headerNames.nextElement();
        String value = request.getHeader(key);
        map.put("header: " + key, value);
    }
    Enumeration parameterNames = request.getParameterNames();
    while (parameterNames.hasMoreElements()) {
        String key = (String) parameterNames.nextElement();
        String value = request.getParameter(key);
        map.put("parameter: " + key, value);
    }
    Cookie[] cookies = request.getCookies();
    for (int i = 0; i < cookies.length; i++) {
        Cookie cookie = cookies[i];
        map.put("cookie: " + cookie.getName(), cookie.getValue());

    }
    while (parameterNames.hasMoreElements()) {
        String key = (String) parameterNames.nextElement();
        String value = request.getParameter(key);
        map.put("parameter: " + key, value);
    }
    map.put("getRequestIPAdrress", getRequestIPAdrress(request));
    map.put("getRemoteUser", request.getRemoteUser());
    map.put("getMethod", request.getMethod());
    map.put("getQueryString", request.getQueryString());
    map.put("getAuthType", request.getAuthType());
    map.put("getContextPath", request.getContextPath());
    map.put("getPathInfo", request.getPathInfo());
    map.put("getPathTranslated", request.getPathTranslated());
    map.put("getRequestedSessionId", request.getRequestedSessionId());
    map.put("getRequestURI", request.getRequestURI());
    map.put("getRequestURL", request.getRequestURL().toString());
    map.put("getMethod", request.getMethod());
    map.put("getServletPath", request.getServletPath());
    map.put("getContentType", request.getContentType());
    map.put("getLocalName", request.getLocalName());
    map.put("getProtocol", request.getProtocol());
    map.put("getRemoteAddr", request.getRemoteAddr());
    map.put("getServerName", request.getServerName());
    return map;
}

【讨论】:

    【解决方案2】:

    您提出的解决方案或多或少是您可以使用 Servlet API(Spring MVC 构建于其之上,因此它不提供任何东西更多)所能做的最好的解决方案。

    根据您使用的 Servlet 容器,它们可能已经有您可以使用的实现。例如,Tomcat 提供org.apache.catalina.filters.RequestDumperFilter 请求和响应信息。

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 1970-01-01
      • 2019-10-02
      • 2017-11-26
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多