2
respostas

Como tratar o erro 404 quando se usa um método personalizado no repository?

Bom dia, no meu caso não estou usando o getReferenceById(), e sim um método personalizado utilizando a conversão do Spring, como faço para o RestControllerAdvice mapear automaticamente o meus métodos criados?

@Repository
public interface MercadoRepository extends JpaRepository<Mercado,Long> {

    List<Mercado> findByCnpj(String Cnpj);;
2 respostas

Olá, Michael! Nesse caso, você terá que validar se a entidade não foi encontrada, lançar uma exceção e no RestControllerAdvice, apontar para esse exceção lançada.

Segue exemplo:

Método que chama o repository

 final MedicoEntity medico = repository.findByCrm(crm);
        
        if (medico == null) {
            throw new EntityNotFoundException();
        }

RestControllerAdvice

 @ExceptionHandler(EntityNotFoundException.class)
    public ResponseEntity tratarErro404() {
        return ResponseEntity.notFound().build();
    }

Note que a exceção definida no ExceptionHandler é a mesma lançada quando não encontrar a entidade.

Com isso, caso não encontre a entidade requisitada, será lançada uma exceção EntityNotFoundException e a mesma será tratada retornando um código 404 na requisição HTTP.

OBS: Você pode validar se a entidade foi encontrada ou não da forma que achar melhor. No exemplo, estamos validando se o retorno da consulta é nulo, porém você pode retornar um Optional e validar a partir dele, fica a seu critério. Sobre a exceção lançada, você pode escolher qualquer exceção que quiser, ou até mesmo criar uma nova. Por boas práticas, apenas cuide se a exceção e a mensagem exibida fazem sentido com o contexto da situação.

Entendo, no caso terei que fazer manualmente mesmo, pensei que teria alguma forma de ser feito de forma automática como no exemplo do vídeo. Obrigado!