- Indica para o Spring que toda vez que uma determinada exceção for lança, o método com essa anotação será invocada para tratá-la.
-
Defina qual exceção será tratada por esse método
@ExceptionHandler(MinhaExcecao.class) // Método
-
OBS: é boa prática criar uma classe para informar mais detalhes sobre a exceção
-
Defina como retorno a classe com mais detalhes: ResponseEntity (SEMPRE)
-
Passe como parâmetro a exceção que será trada por ele
@ExceptionHandler(MinhaExcecao.class) public ResponseEntity<MinhaExcecaoDetalhes> handleMinhaExcecao(MinhaExcecao exception) { // Código }
-
Instancie a classe MinhaExcecaoDetalhes com:
- Construtor
@ExceptionHandler(MinhaExcecao.class) public ResponseEntity<MinhaExcecaoDetalhes> handleMinhaExcecao(MinhaExcecao exception) { MinhaExcecao exception = new MinhaExcecao(...atributos...); }
- Builder (Lombok)
@ExceptionHandler(MinhaExcecao.class) public ResponseEntity<MinhaExcecaoDetalhes> handleMinhaExcecao(MinhaExcecao exception) { MinhaExcecao exception = MinhaExcecao .builder() ... atributos ... .build() }
- Construtor
-
Por fim, retorno o objeto na corpo da resposta
@ExceptionHandler(MinhaExcecao.class) public ResponseEntity<MinhaExcecaoDetalhes> handleMinhaExcecao(MinhaExcecao exception) { MinhaExcecao exception = new MinhaExcecao(...atributos...); return ResponseEntity .status(CcdigoHttp) .body(exception); }
- Mais segurança na API.
- Facilita a vida de quem for usar a API.