In SpringBoot können Ausnahmen mit mehreren Methoden behandelt werden, z. B. Ausnahmebehandlung mit der SpringMVC-Funktion und Ausnahmebehandlung mit der AutoConfiguration und dem integrierten Server von SpringBoot. Obwohl dies in Official Reference angegeben ist, sind der Bereich und der Mechanismus, die gehandhabt werden können, etwas schwer zu verstehen. Also werde ich die wichtigsten Methoden zusammenfassen.
Funktionsname | Schicht |
---|---|
HandlerExceptionResolver | SpringMVC |
ErrorPage | SpringBoot |
ErrorController | SpringBoot |
HandlerExcepitonResolver
HandlerExceptionResolver
ist eine Ausnahmebehandlungsmethode, die die Funktionen von Spring MVC verwendet.
Da die SpringMVC-Funktion verwendet wird, kann sie nicht behandelt werden, wenn in Filter oder Ansicht eine Ausnahme auftritt.
Ein schematisches Diagramm der Handhabung ist unten gezeigt.
Standardmäßig verfügt HandlerExceptionResolver
über mehrere unten gezeigte Implementierungsklassen.
In der folgenden Tabelle gibt enable / disable an, ob es in den Standardeinstellungen von Spring Boot aktiviert oder deaktiviert ist, und der oben stehende ExceptionResolver hat Priorität.
Name der Klasse | Wirksamkeit/Ungültig | Funktion |
---|---|---|
ExceptionHandlerExceptionResolver | Wirksamkeit | @Die Ausnahmebehandlung wird von der Methode ausgeführt, der ExceptionHandler zugewiesen ist. |
ResponseStatusExceptionResolver | Wirksamkeit | @Handle, wenn eine Ausnahmeklasse mit ResponseStatus generiert wird |
DefaultHandlerExceptionResolver | Wirksamkeit | Behandelt in Spring MVC definierte Ausnahmeklassen |
SimpleMappingExceptionResolver | Ungültig | Ordnen Sie Ausnahmeklassen und Ansichten direkt zu |
Das Folgende zeigt die Ausnahmebehandlungsmethode des orthodoxsten "ExceptionHandlerExceptionResolver".
Wenn eine Ausnahme auftritt, wird die Methode mit der Annotation @ExceptionHandler, zu der die Metainformationen der aufgetretenen Ausnahmeklasse hinzugefügt werden, gescannt und die Verarbeitung übertragen.
Die Methode mit @ExceptionHandler kann in der Klasse mit @Controller oder @ControllerAdvice wie unten gezeigt definiert werden.
ThrowExceptionController.java
@Controller
@RequestMapping("web")
public class ThrowExceptionController {
@GetMapping("original")
public void throwOriginalException() {
throw new OriginalWebException("thrown in ThrowExceptionController");
}
@ExceptionHandler(OriginalWebException.class)
public String handleOriginalWebException(OriginalWebException exception) {
return "OriginalWebException.html";
}
}
TransverseExceptionHandler.java
@ControllerAdvice
public class ThrowExceptionController {
@ExceptionHandler(OriginalWebException.class)
public String handleOriginalWebException(OriginalWebException exception) {
return "OriginalWebException.html";
}
}
Im Fall von @Controller ist die Ausnahmebehandlung nur für Ausnahmen möglich, die im selben Controller auftreten. Im Fall von @ControllerAdvice können jedoch alle Controller auf der ganzen Linie behandelt werden.
Wenn sowohl @Controller als auch @ControllerAdvice verarbeitet werden können, hat die für @Controller angegebene Priorität.
ErrorPage
Die ErrorPage in SpringBoot entspricht fast dem ErrorPage-Element, das in der herkömmlichen SpringFW Web.xml definiert ist.
ErrorPage ordnet den Statuscode oder die Ausnahmeklasse dem Pfad zu, damit er verarbeitet werden kann. Ein schematisches Diagramm ist unten gezeigt.
Das Registrieren von ErrorPage kann durch Erstellen einer Implementierungsklasse von ErrorPageRegistrar erfolgen (siehe unten).
AddErrorPage.java
@Configuration
public class AddErrorPage implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
registry.addErrorPages(new ErrorPage(exception, path));
// new ErrorPage(HttpStatusCode, path)Aber möglich
}
}
ErrorController ErrorController ist eine von Spring Boot bereitgestellte Ausnahmebehandlungsmethode und die am häufigsten verwendete Methode zur Ausnahmebehandlung in Spring Boot. Ein schematisches Diagramm ist unten gezeigt.
Wenn die in der Spring Boot-Anwendung auftretenden Ausnahmen nicht behandelt werden, sollten sie alle von der oben beschriebenen ErrorPage-Funktion an den Pfad / error
gesendet werden.
Standardmäßig wird / error
der Klasse BasicErrorController
zugeordnet und dort behandelt.
In BasicErrorController
gibt die Behandlung je nach Anforderungsheader HTML oder JSON zurück.
Im Fall von HTML wird "WhiteLabelErrorPage" zurückgegeben, und der zurückgegebene Inhalt wird durch "ErrorAttributes" angegeben.
Im Fall von JSON wird ErrorAttributes
zurückgegeben.
Erstellen Sie eine Implementierungsklasse von "ErrorController", um die Behandlungsmethode durch "ErrorController" anzupassen. Wenn Sie den zurückgegebenen Inhalt anpassen möchten, implementieren Sie außerdem die Klasse "ErrorAttributes".
Die Ausnahmebehandlung in der SpringBoot-Anwendung verwendet grundsätzlich "ErrorController". Wenn Sie eine feinere Behandlung durchführen möchten, verwenden Sie "HandlerExceptionResolver".
Recommended Posts