Troubleshooting von Spring MVC

Letztens hatten wir auf der Arbeit einen Fall wo nicht klar war, warum ein Request nicht beim Spring MVC Controller ankam. Die Ursache kann bei solchen Problemen normalerweise recht schnell gefunden werden, in dem man das DispatcherServlet von Spring debugged. Dazu am besten einen Breakpoint in dessen doDispatch Methode setzen und den Request danach erneut ausführen. Die Methode ist verständlich und man erkennt beim schrittweisen Ausführen der Methode normalerweise recht schnell, warum ein Request nicht wie erwartet verarbeitet wird. Häufig findet man bei genauere Betrachtung der getHandler Methode des Spring DispatcherServlets, die von der doDispatch Methode aufgerufen wird,  den Übeltäter:

Spring DispatcherServlet getHandler method

In dieser wird eine Liste von Handlermappings durchlaufen um zu prüfen, ob der aktuelle Request auf eines davon passt. Wird eine mit @RequestMapping annotierte Methode nicht aufgerufen, lohnt es sich bspw. bis zum Aufruf des RequestMappingHandlerMappings vorzulaufen und dann  zu debuggen, was diese für Mappings beinhaltet und warum keines davon auf den aktuellen Request passt. Ist man hier immer noch ratlos, vergleicht man es am besten noch mit einem Request, der erfolgreich aufgelöst werden kann.

Durch diese Vorgehensweise kann man häufig recht schnell die Lösung finden wenn man alles offensichtliche, wie bspw. falsche Pfade oder falsche Http Methode, schon geprüft hat.