In meiner Anwendung habe ich ein paar RequestMappings, die nur POST zulassen. Wenn jemand eine GET-Anforderung an diesem bestimmten Pfad auslöst, erhält er eine 405-Fehlerseite, die vom Container (Tomcat) gespeist wird. Ich kann eine 405-Fehlerseite in web.xml für die Anpassung erstellen und definieren.Benutzerdefinierte Behandlung für 405 Fehler mit Spring Web MVC
Was ich will: jede Anfrage, die einen Fehler 405 ergeben würde, sollte in einer bestimmten Controller-Methode behandelt werden.
Was ich versucht habe:
- ein Verfahren mit "method = GET" als Gegenstück für jede der genannten Abbildungen. Das funktioniert gut, aber ich muss eine tatsächliche Anforderungszuordnung und Methode für jeden Pfad erstellen, der nur POST erlaubt. Ich finde diese unnötige Duplizierung und Unordnung.
- eine globale 'catch' -Methode (requestmapping/*): dies funktioniert nicht, da Spring die GET-Methode als falschen Aufruf des mit POST angegebenen Pfads verwendet
- eine ExceptionHandler-annotierte Methode zur Behandlung von Ausnahmen von Klasse HttpRequestMethodNotSupportedException: Dies funktioniert nicht. Es scheint, dass Spring diese Ausnahme vollständig in ihrem Framework-Code auslöst.
- geben Sie meine eigene 405 in web.xml an. Dies ist nicht perfekt, da ich eine benutzerdefinierte Behandlung und keine statische Fehlerseite haben möchte.
Das ist perfekt! Eine Sache, auf die andere achten müssen, ist, dass Sie, wenn Sie sich dazu entscheiden, DefaultHandlerExceptionResolver zu überschreiben, auch die Methode getOrder() überschreiben sollten, die in der Schnittstelle Ordered angegeben ist. In dieser Methode sollten Sie einen int-Wert niedriger als Integer.MAX_VALUE zurückgeben. Der Grund dafür ist, dass der niedrigste geordnete Handler den ersten Schuss bei der Ausnahme erhält. Trotzdem danke! – Zaan