Chr*_*ams 6 java rest spring request
我们有一个 Spring 方法来处理 REST 调用,但根据我们使用的客户端(浏览器与移动应用程序),我们遇到了一些问题。我们希望能够看到原始请求和标头,但无法弄清楚如何轻松做到这一点。我们想出的最好的方法是将 添加到HttpServletRequest方法中的参数中,并创建一个长方法来打印请求对象的各个部分。有没有更好的方法,比如为某些特定的 Spring 类打开调试日志记录org.springframework.web.*?
我们的方法的编辑版本和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) + "'");
}
}
Run Code Online (Sandbox Code Playgroud)
您提出的解决方案或多或少是您可以使用 Servlet API 实现的最佳解决方案(Spring MVC 是基于该 API 构建的,因此它不再提供任何其他功能)。
根据您使用的 Servlet 容器,它们可能已经有您可以使用的实现。例如,Tomcat 提供org.apache.catalina.filters.RequestDumperFilter请求和响应信息。
| 归档时间: |
|
| 查看次数: |
14946 次 |
| 最近记录: |