Solución:
Recomiendo usar Spring’s @ControllerAdvice
para manejar errores. Lea esta guía para obtener una buena introducción, comenzando en la sección denominada “Manejo de errores de Spring Boot”. Para una discusión en profundidad, hay un artículo en el blog Spring.io que se actualizó en abril de 2018.
Un breve resumen de cómo funciona esto:
- Su método de controlador solo debería regresar
ResponseEntity<Success>
. No será responsable de devolver respuestas de error o excepción. - Implementarás una clase que maneja excepciones para todos los controladores. Esta clase se anotará con
@ControllerAdvice
- Esta clase de aviso del controlador contendrá métodos anotados con
@ExceptionHandler
- Cada método de manejo de excepciones se configurará para manejar uno o más tipos de excepciones. Estos métodos son donde especifica el tipo de respuesta para errores
- Para su ejemplo, declararía (en la clase de aviso del controlador) un método de manejo de excepciones para el error de validación. El tipo de retorno sería
ResponseEntity<Error>
Con este enfoque, solo necesita implementar el manejo de excepciones de su controlador en un solo lugar para todos los puntos finales en su API. También facilita que su API tenga una estructura de respuesta de excepción uniforme en todos los puntos finales. Esto simplifica el manejo de excepciones para sus clientes.
Puede devolver un comodín genérico <?>
regresar Success
y Error
en un mismo método de asignación de solicitudes
public ResponseEntity<?> method() {
boolean b = // some logic
if (b)
return new ResponseEntity<Success>(HttpStatus.OK);
else
return new ResponseEntity<Error>(HttpStatus.CONFLICT); //appropriate error code
}
@Mark Norman respuesta es el enfoque correcto
no estoy seguro, pero creo que puedes usar @ResponseEntity
y @ResponseBody
y enviar 2 diferentes es Éxito y el segundo es un mensaje de error como:
@RequestMapping(value ="/book2", produces =MediaType.APPLICATION_JSON_VALUE )
@ResponseBody
Book bookInfo2() {
Book book = new Book();
book.setBookName("Ramcharitmanas");
book.setWriter("TulasiDas");
return book;
}
@RequestMapping(value ="/book3", produces =MediaType.APPLICATION_JSON_VALUE )
public ResponseEntity<Book> bookInfo3() {
Book book = new Book();
book.setBookName("Ramayan");
book.setWriter("Valmiki");
return ResponseEntity.accepted().body(book);
}
Para obtener más detalles, consulte esto: http://www.concretepage.com/spring-4/spring-4-mvc-jsonp-example-with-rest-responsebody-responseentity