Zum Hauptinhalt springen

Umgang mit Fehlern

Im Backend von Subato werden Fehler nach dem Stil der aspektorientierten Programmierung behandelt, d.h. eine (oder mehrere) @ControllerAdvice-Klassen verarbeiten aufgetretene Exceptions und sorgen dafür, dass diese in geeignete Repräsentationen umgewandelt und an Clients zurückgegeben werden. Siehe GlobalExceptionHandler. Exceptions werden in beliebigen Schichten des Systems geworfen und nur dann verarbeitet, wenn es für den Kontrollfluss notwendig ist. Nicht abgefangene Exceptions werden über den Advice geregelt.

Exceptions

Exceptions sind mit der @ResponseStatus zu annotieren, indem der Statuscode und ein Reason angegeben wird, der eine menschenlesbare und allgemeine Beschreibung des Fehlers enthält. Wenn eine kontextspezifische Beschreibung des Fehlers notwendig ist (die dynamisch aus den Parametern einer Exception erzeugt werden muss), ist die Schnittstelle ReasonProvider in der Exception zu implementieren. Um z.B. *NotFound-Exceptions in einem anderen Kontext verwenden zu können (in denen kein 404 zurückgegeben werden soll), wurde die @ResponseStatusMapping entwickelt, um den Statuscode für bestimmte Endpunkte umzumappen (siehe JavaDocs).

In einigen Fällen muss ein Client auf bestimmte Fehler anders reagieren, weshalb mit der @Error-Annotation eine Exception mit einem eindeutigen ErrorCode annotiert werden kann. In diesem Zusammenhang müssen ggf. auch weitere Informationen zum Fehler in maschinenlesbarem Format an Clients zurückgegeben werden. Dies wird mit Feldern in der Exception-Klasse, der @Expose-Annotation und der ErrorDataSerializer-Komponente umgesetzt (siehe JavaDocs).