Der bessere Ansatz ist, um die Rückkehr HttpStatus-code-Spring-REST

Entwickle ich rest-service mit spring für eine lange Zeit, und bis jetzt ist mein Ansatz für die Rückgabe von http-status-code war so:

    @RequestMapping(value = "/sth")
    public void name(HttpServletResponse response){
        boolean lever = service.doSomethingAndReturnTrueIfSucceedOrFalseIfNot();
        if(lever){
            response.setStatus(HttpServletResponse.SC_OK);
        }else{
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST); //NOT_FOUND or whatever
        }
    }

Aber ich bin sicher, es gibt einen besseren Weg, dies zu tun. Ich weiß, dass wir @ResponseStatus Anmerkung, aber es ist.. statisch, ich meine, es gibt immer den gleichen code - aber was ist, wenn etwas schief gegangen? Dann möchte ich nicht das zum Beispiel 200 OK-Antwort-code.

Fand ich die Lösung wie diese: hinzufügen @ResponseStatus als statische response-code, aber wenn etwas schief geht in den controller, dann werfen einige benutzerdefinierte Ausnahme und fängt es in der neuen @ControllerAdvice Klasse, und es gibt auch add @ResponseStatus annotation und zurückgeben richtigen code.

    @RequestMapping(value = "/sth")
    @ResponseStatus(HttpStatus.OK)
    public void name(HttpServletResponse response) throws Exception{
        boolean lever = service.doSomethingAndReturnTrueIfSucceedOrFalseIfNot();
        if(!lever){
            throw new SomethingWentWrongCustomException("Not okay..");
        }
    }

Und dann fangen Sie in der Klasse wie:

@ControllerAdvice
public class SomethingControllerAdvice{
    @ExceptionHandler(value = SomethingWentWrongCustomException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public void someName(){
    }
}

Es scheint ganz elegante Lösung, aber der code ist ziemlich.. wortreich, nicht wahr?
Auf der anderen Seite, Wenn ich gibt es für die ganze Anwendung und erstellen @ControllerAdvice Klassen, dann könnte Es Sinn
Was denkst du über es? Gibt es einen anderen, vielleicht besseren Ansatz?

Ich hoffe, es ist keine Meinung Frage, die ich nicht wollen, es zu sein. Ich will nur nicht, um anti-patterns und gute Praktiken aus begginings 🙂

Rückkehr einer ResponseEntity anstatt die Antwort.
Ist es gut, wenn ich zurück ResponseEntity in reiner RESTful-service?
Warum würde nicht es sein? Das ist der springende Punkt bei der Sache...
dann, die ResponseEntity Klasse erzeugt und verarbeitet in @Service-Schicht und zurück zu der Steuerung, hab ich Recht? Und ist es möglich, zu vermeiden, "wenn" wie die oberen? da würde ich noch überprüfen, "ob alles okay ist" - Zustand
Nein.... Sie erstellen, basierend auf dem Ergebnis in der Steuerung. Die ResponseEntity ist ein web-Klasse, die Sie nicht wollen, dass Sachen, die in Ihrem service-Schicht. Sie haben noch zu überprüfen, irgendwo obwohl Sie es schaffen könnte eine Kurzform, wenn.

InformationsquelleAutor azalut | 2015-01-05

Schreibe einen Kommentar