0

In einer mehrschichtigen Anwendung muss ich den HTTP-Code einer Ausnahme mithilfe von Spring Annotation @ResponseStatus definieren.HTTP-Code in Java-Ausnahmen

Zum Beispiel:

@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "Illegal argument") 
public class IllegalContentException{ 


} 

Es funktioniert, aber ich würde gerne wissen, ob dies eine schlechte Praxis ist, wenn man versucht zu brechen Muster Einzelne Verantwortlich (in diesem Ansatz die Ausnahme kennt HTTP-Codes) zu vermeiden.

Die Frage ist:

  • Sollte HTTP-Code in Ausnahmen definiert werden, in, ohne dabei die Schicht sie angehören zählen? Sollte HTTP-Code in Ausnahmen definiert sein, die zu DAO, Service-Schicht und/oder Controllern gehören?

Antwort

2

Wenn Sie wollen nicht die Antwort-Codes in jede Ausnahme setzen, ist eine Option, ein zentralisiertes Exception-Handler mit einem @ControllerAdvice Klasse, bestehend aus Methoden mit @ExceptionHandler und @ResponseStatus Anmerkungen zu erstellen.

@ControllerAdvice 
public class CentralizedExceptionHandler { 

    @ExceptionHandler(IllegalContentException.class) 
    @ResponseBody 
    @ResponseStatus(HttpStatus.BAD_REQUEST) 
    public String handleError(IllegalContentException e) { 
     return "Illegal argument"; 
    } 
} 
+0

Ich mag diese Art von Ansatz, besser als HTTP-Einstellungen in jeder Ausnahme angeben. Ich wusste nicht über ControllerAdvice Annotation, werde es versuchen. Vielen Dank! –

0

Ich glaube die Antwort kann am Anfang auf https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc gefunden werden.

Copy & Paste aus der bereitgestellten Website:. „Ziel ist es, nicht Ausnahmen explizit in Controller-Methoden zu behandeln, wo möglich, Sie sind ein greifendes Anliegen besser separat in dedizierten Code behandelt

Es gibt drei Optionen.: pro Ausnahme, pro Controller oder global. "

+0

Danke für den nützlichen Link. Tatsächlich gibt es drei Möglichkeiten, aber ich frage mich, welche von ihnen eine Best Practice ist. Es scheint ein Punkt zu sein, es als eine Querschnittsaufgabe zu betrachten, aber jeder Ausnahme auch mehr als eine Verantwortung zu geben. –

Verwandte Themen