Używam Spring Boot do prostego interfejsu API REST i chciałbym zwrócić poprawny kod stanu HTTP, jeśli coś się nie powiedzie.
@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?
}
Będąc nowicjuszem w Spring i Spring Boot, podstawowe pytanie brzmi: jak zwrócić różne kody stanu, gdy coś jest w porządku lub nie działa?
spring
rest
spring-boot
Marco
źródło
źródło
javax.servlet.http.HttpServletResponse
wydaje się , że nie ma wszystkich kodów statusu, które mająorg.springframework.http.HttpStatus
. Możesz więc użyćHttpStatus.UNPROCESSABLE_ENTITY.value()
do przekazania wartości int do response.setStatus. Również to doskonale sprawdza się w przypadku obsługi błędów przy użyciu@ExceptionHandler
.Jednym ze sposobów jest użycie ResponseEntity jako obiektu zwracanego.
źródło
Wypróbuj ten kod:
źródło
ErrorBean
?Przyjemnym sposobem jest użycie wyjątku ResponseStatusException Springa
Zamiast zwracać a
ResponseEntity
lub coś podobnego, po prostu wyrzucaszResponseStatusException
ze sterownika zHttpStatus
przyczyną i, na przykład:lub:
Skutkuje to odpowiedzią do klienta zawierającą status HTTP (np. 400 Bad request) z treścią taką jak:
źródło
Jeśli chcesz zwrócić niestandardowy kod stanu, możesz użyć elementu ResponseEntity, jak tutaj:
CustomHttpStatusValue może być dowolną liczbą całkowitą w ramach standardowych kodów stanu HTTP lub poza nimi.
źródło
Istnieją różne sposoby zwracania kodu statusu, 1: klasa RestController powinna rozszerzać klasę BaseRest, w klasie BaseRest możemy obsłużyć wyjątek i zwrócić oczekiwane kody błędów. na przykład :
źródło