Bearbeiten: Ich habe mir die Annotation @ExceptionHandler
in Spring 3 angesehen und diese Option mit Option 1 kombiniert, scheint eine ziemlich saubere Lösung zu sein.
Siehe Ссылка
Ich fand auch, dass dies eine gute Lektüre ist: Ссылка
Ich habe das Spring MVC-Framework schon seit einiger Zeit entwickelt, aber ich habe Mühe, einen "netten" Weg zu finden, um Fehler, die in der Service-Schicht auftreten, an die JSP zurückzugeben.
Grundsätzlich glaube ich nicht, dass Geschäftslogik (außer "dieses Feld ist obligatorisch") in den Validatoren sein sollte, insbesondere in jeder Logik, die Zugriff auf die DB erfordert. Was ich gemacht habe, ist, weitere, kompliziertere Validierungs- und Geschäftslogik in die Service-Schicht zu bringen.
Nehmen wir zum Beispiel an, ich habe eine Seite, auf der ein Benutzer ein Buch kaufen kann. Sie klicken auf "Kaufen" auf der JSP und der Controller ruft den Dienst an, um alles zu ermöglichen ... Was passiert jetzt, wenn der Dienst sieht, dass sie nicht genügend Geld haben - wie bekomme ich diese Nachricht zurück an die JSP so ein nettes bisschen "Unzureichende Mittel" Nachricht kann dem Benutzer angezeigt werden? Ich habe zwei Möglichkeiten in Betracht gezogen und ich bin mir nicht sicher, was richtig ist ...
Option 1: Ausnahmen
Der erste Weg, den ich dachte, war, eine Exception in der Service-Schicht auszulösen, sie im Controller einzufangen und dem BindingResult eine Nachricht hinzuzufügen.
Service:
%Vor%Controller:
%Vor%Option 2: Übergeben Sie BindingResult an die Serviceebene
Die zweite Möglichkeit bestand darin, das BindingResult-Objekt an die Service-Schicht zu übergeben und weitere Fehler zu erzeugen.
Service:
%Vor%Ich kann Probleme mit diesen beiden Möglichkeiten sehen. Option 1 fühlt sich peinlich an, weil ich nicht nur die Ausnahme abfangen muss, sondern den Fehler zum Bindungsergebnis hinzufügen muss, so dass es sich anfühlt, als würde ich zweimal dasselbe tun. Und Option 2 scheint die Serviceschicht zu fest an den Controller zu binden.
Endlich merke ich, dass es das SimpleMappingExceptionResolver
gibt, das in Verbindung mit Option 1 verwendet werden könnte, aber ich bin mir nicht sicher, wie angemessen es ist (vielleicht habe ich kein richtiges Beispiel gesehen? ). Im obigen Beispiel sagen wir nur um des Arguments willen, dass ich möchte, dass der Benutzer mit einem roten Fehler über dem Formular zum ursprünglichen Formular zurückkehrt und nicht auf eine völlig andere Seite umgeleitet wird. Der SimpleMappingExceptionResolver scheint mir nützlich zu sein, wenn Sie einen Benutzer auf eine Standardfehlerseite umleiten wollen, wenn eine bestimmte Ausnahme ausgelöst wird (was nicht ganz das ist, was ich wissen möchte).
Java verwendet Ausnahmen, um solche Dinge auf natürliche Weise zu behandeln. Am Ende vereinfacht es im Allgemeinen Ihre Logik und verringert die Wahrscheinlichkeit, einen Fehler zu machen, indem Sie vergessen zu überprüfen, dass etwas einen Fehler hatte. Sie können auch die Fehlerlogik aus dem Hauptfluss des Codes entfernen.
Ich sehe nicht, warum der Fall, den Sie präsentieren, anders ist als jeder andere Fall, in dem ich die Ausnahmebehandlung verwenden würde, um mit Fehlern umzugehen.
Tags und Links java spring spring-mvc