Wie kann ich mich anmelden alle request-und die header-Informationen für eine Feder @RestController @RequestMapping-Methode?
Haben wir eine Frühlings-Methode, mit der ein REST Aufruf, dass wir einige Probleme mit, je nachdem, auf welche Kunden wir verwenden (browser vs. mobile Anwendung). Wir möchten in der Lage sein zu sehen, die raw-Anforderung und-Header, aber nicht in der Lage gewesen, um herauszufinden, wie leicht tun. Das beste, was wir haben, ist das hinzufügen der HttpServletRequest
unsere Parameter in der Methode und erstellen Sie eine lange Methode zum drucken der verschiedenen Teile des request-Objekts. Gibt es einen besseren Weg, wie Sie auf die debug-Protokollierung für bestimmte org.springframework.web.*
Spring Klasse?
Eine überarbeitete version unserer Methode und der printRequestInfo()
Methode ist:
@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) + "'");
}
}
- Registrieren Sie eine der Unterklasse der
AbstractRequestLoggingFilter
und konfigurieren Sie es entsprechend. Siehe auch stackoverflow.com/questions/25905296/....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung, die Sie vorschlagen, ist mehr oder weniger das beste, was Sie tun können, mit der Servlet-API (mit Spring MVC basiert, so dass es bietet nichts mehr).
Je nachdem, welche Servlet-container, die Sie verwenden, können Sie bereits eine Implementierung, die Sie verwenden können. Zum Beispiel, Tomcat bietet
org.apache.catalina.Filter.RequestDumperFilter
request-und response-Informationen.Ich konnte nicht finden einen anderen Weg, es zu tun.