Estou usando o Spring Boot para uma API REST simples e gostaria de retornar um código de status HTTP correto se algo falhar.
@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?
}
Sendo novo no Spring e no Spring Boot, a questão básica é como retorno códigos de status diferentes quando algo está ok ou falha?
spring
rest
spring-boot
Marco
fonte
fonte
javax.servlet.http.HttpServletResponse
parece não ter todos os StatusCodes queorg.springframework.http.HttpStatus
tem. Portanto, você pode usarHttpStatus.UNPROCESSABLE_ENTITY.value()
para passar o valor int para response.setStatus. Também funciona perfeitamente para o tratamento de erros usando@ExceptionHandler
.Uma das maneiras de fazer isso é usar ResponseEntity como um objeto de retorno.
fonte
Experimente este código:
fonte
ErrorBean
?Uma boa maneira é usar ResponseStatusException do Spring
Em vez de retornar um
ResponseEntity
ou semelhante, você simplesmente joga oResponseStatusException
do controlador com umHttpStatus
e causa, por exemplo:ou:
Isso resulta em uma resposta ao cliente contendo o status HTTP (por exemplo, 400 Bad request) com um corpo como:
fonte
Caso queira retornar um código de status definido de forma personalizada, você pode usar o ResponseEntity como aqui:
O CustomHttpStatusValue pode ser qualquer número inteiro dentro ou fora dos códigos de status HTTP padrão.
fonte
Existem diferentes maneiras de retornar o código de status, 1: a classe RestController deve estender a classe BaseRest, na classe BaseRest podemos tratar a exceção e retornar os códigos de erro esperados. por exemplo :
fonte