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 🙂
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rückkehr
ResponseEntity
@M-deinum schrieb ist definitiv der Weg zu gehen. Zusätzlich, anstatt zu definieren Verhalten für jede Ausnahme in@ControllerAdvice
können Sie nur kommentieren Ihre Ausnahmen-Klassen mit entsprechenden@ResponseStatus
Anmerkungen.Vermeiden
if
durch nicht-Rückgabe boolean von der Methode. Ich glaube nichtig, und nichts zu tun, wenn erfolgreich, und warf Ausnahme, wenn versäumt würde, werden in den meisten Fällen angemessen, aber natürlich auch Ihren Anwendungsfall unterschiedlich sein können.InformationsquelleAutor Maciej Walkowiak