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 ResponseEntity
o 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.