fiquei um pouco confuso, na api está sendo retornado o erro 500 porem criamos uma classe para tratar o erro 404, qual a relação entre os dois erros ? e o que esta acontecendo por trás com essas anotações ?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
fiquei um pouco confuso, na api está sendo retornado o erro 500 porem criamos uma classe para tratar o erro 404, qual a relação entre os dois erros ? e o que esta acontecendo por trás com essas anotações ?
Oi Lucas!
Entendo a sua confusão, e vou tentar esclarecer a relação entre os erros 500 e 404, além de explicar o que acontece por trás com as anotações do Spring.
O erro 500 é um erro genérico do servidor, que indica que algo inesperado aconteceu durante o processamento da requisição. No contexto do Spring Boot, isso geralmente ocorre quando uma exceção não tratada é lançada. Por exemplo, se você tenta acessar um recurso no banco de dados que não existe e não há um tratamento específico para essa situação, o Spring lançará uma exceção que resultará em um erro 500.
Já o erro 404 significa "Not Found" e é mais específico. Ele indica que o recurso solicitado não foi encontrado no servidor. No seu caso, quando você tenta acessar um médico por um ID que não existe, o ideal é retornar um erro 404, pois o recurso (médico) não foi encontrado.
Para lidar com isso, você criou uma classe de tratamento de erros com a anotação @RestControllerAdvice, que permite capturar exceções específicas, como a EntityNotFoundException, e retornar um erro 404 em vez do 500 padrão. O método tratarErro404() dentro dessa classe é anotado com @ExceptionHandler(EntityNotFoundException.class), o que informa ao Spring que, quando essa exceção ocorrer, ele deve executar esse método e retornar a resposta configurada, que no seu caso é um ResponseEntity.notFound().build().
Isso ajuda a manter o código do seu controller mais limpo, sem a necessidade de colocar blocos try-catch em todos os lugares onde essa exceção pode ocorrer.
Espero ter ajudado e bons estudos!