Ich verwende Spring Boot für eine einfache REST-API und möchte einen korrekten HTTP-Statuscode zurückgeben, wenn etwas fehlschlägt.
@RequestMapping(value="/rawdata/", method = RequestMethod.PUT)
@ResponseBody
@ResponseStatus( HttpStatus.OK )
public RestModel create(@RequestBody String data) {
// code ommitted..
// how do i return a correct status code if something fails?
}
Da Spring und Spring Boot neu sind, lautet die grundlegende Frage: Wie kann ich verschiedene Statuscodes zurückgeben, wenn etwas in Ordnung ist oder fehlschlägt?
quelle
javax.servlet.http.HttpServletResponse
anscheinend nicht alle StatusCodes vorhanden sindorg.springframework.http.HttpStatus
. Sie können alsoHttpStatus.UNPROCESSABLE_ENTITY.value()
den int-Wert an response.setStatus übergeben. Auch dies funktioniert perfekt zur Fehlerbehandlung mit@ExceptionHandler
.Eine Möglichkeit, dies zu tun, besteht darin, ResponseEntity als Rückgabeobjekt zu verwenden.
quelle
Versuchen Sie diesen Code:
quelle
ErrorBean
?Wenn Sie einen benutzerdefinierten Statuscode zurückgeben möchten, können Sie die ResponseEntity wie folgt verwenden:
Der CustomHttpStatusValue kann eine beliebige Ganzzahl innerhalb oder außerhalb der Standard-HTTP-Statuscodes sein.
quelle
Eine gute Möglichkeit ist die Verwendung der ResponseStatusException von Spring
Anstatt ein
ResponseEntity
oder ähnliches zurückzugeben, werfen Sie das einfachResponseStatusException
vom Controller mit einemHttpStatus
und Ursache, zum Beispiel:oder:
Dies führt zu einer Antwort an den Client, die den HTTP-Status enthält (z. B. 400 Bad Request), mit einem Text wie:
quelle