leandromoraesrj / sincad-backend

PROJETO BASE DE EXEMPLO USANDO AS MELHORES PRATICAS DE DESENVOLVIMENTO
0 stars 0 forks source link

Criar Handler (observer) para capturar exceções #32

Open leandromoraesrj opened 2 years ago

leandromoraesrj commented 2 years ago

Basta gerar a Exception no Service: return getReadOnlyRepository().findById(id).orElseThrow(() -> new EntityNotFoundException(id.toString()));

E tratar no Controller com o uso de @ControllerAdvice

@ControllerAdvice(annotations = RestController.class)
public class RestExceptionHandler {
    @ExceptionHandler(EntityNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleEntityNotFound(final EntityNotFoundException exception) {
        final ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setHttpStatus(exception.getStatus().value());
        errorResponse.setException(exception.getClass().getSimpleName());
        errorResponse.setMessage(exception.getMessage());
        return new ResponseEntity<>(errorResponse, exception.getStatus());
    }

OBS: Mais detalhes no commit, pois precisa que seja criado uma classe para detalhes do erro, outra para ficar capturando o erro e as próprias Exceptions criadas;

O Spring Boot fornece algumas propriedades com as quais podemos adicionar a mensagem de exceção, classe de exceção ou até mesmo um rastreamento de pilha como parte da carga de resposta :

server.error.include-message=ALWAYS
server.error.include-binding-errors=ALWAYS
server.error.include-stacktrace=ON_TRACE_PARAM
server.error.include-exception=false

A propriedade include-stacktrace = on_trace_param significa que se incluído o parâmetro na URL ( ?trace=true), será retornado o stacktrace, conforme:

Referência:https://reflectoring.io/spring-boot-exception-handling/

Referência:https://www.toptal.com/java/spring-boot-rest-api-error-handling

Referência:https://zetcode.com/springboot/controlleradvice/