Saltar al contenido

Spring Boot Rest Controller ¿cómo devolver diferentes códigos de estado HTTP?

El paso a paso o código que verás en este post es la solución más fácil y efectiva que encontramos a tu duda o problema.

Solución:

Hay varias opciones que puede utilizar. Una buena manera es usar excepciones y clases para manejar llamadas @ControllerAdvice:

@ControllerAdvice
class GlobalControllerExceptionHandler 
    @ResponseStatus(HttpStatus.CONFLICT)  // 409
    @ExceptionHandler(DataIntegrityViolationException.class)
    public void handleConflict() 
        // Nothing to do
    

También puedes pasar HttpServletResponse al método del controlador y simplemente establezca el código de respuesta:

public RestModel create(@RequestBody String data, HttpServletResponse response) 
    // response committed...
    response.setStatus(HttpServletResponse.SC_ACCEPTED);

Consulte esta excelente publicación de blog para obtener más detalles: Manejo de excepciones en Spring MVC


NOTA

En Spring MVC usando @ResponseBody la anotación es redundante, ya está incluida en @RestController anotación.

Una de las formas de hacer esto es usar ResponseEntity como un objeto de retorno.

@RequestMapping(value="/rawdata/", method = RequestMethod.PUT)

public ResponseEntity create(@RequestBody String data) 

if(everything_fine)
    return new ResponseEntity<>(RestModel, HttpStatus.OK);
else
    return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);


Una buena manera es usar la excepción ResponseStatusException de Spring.

En lugar de devolver un ResponseEntityo similar simplemente tiras el ResponseStatusException del controlador con un HttpStatus y causa, por ejemplo:

throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Cause description here");

o:

throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Cause description here");

Esto da como resultado una respuesta al cliente que contiene el estado HTTP (por ejemplo, 400 Solicitud incorrecta) con un cuerpo como:


  "timestamp": "2020-07-09T04:43:04.695+0000",
  "status": 400,
  "error": "Bad Request",
  "message": "Cause description here",
  "path": "/test-api/v1/search"

Nos puedes sostener nuestra labor exponiendo un comentario y valorándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *