5
respostas

[Projeto] Devolver mensagem quando não encontrar o destino pelo nome

Boa noite, queria tirar uma dúvida, vou compartilhar o link do projeto aqui, queria saber como eu poderia criar um método ou algo do tipo que me retorne uma mensagem quando eu não tiver um destino com o nome cadastrado no sistema, e a outra dúvida também é como eu poderia colocar para que eu possa pesquisar um nome mesmo o usuário informando letras maiusculas e minusculas ou somente uma parte do nome do destino.

Link GitHub - https://github.com/ViniciusSilvaDeOliveira/Challange_alura_backend

@GetMapping("/{nome}") public ResponseEntity detalhar(@PathVariable String nome){ var destinos = destinosRepository.getDestinoByNome(nome); return ResponseEntity.ok(new DadosDetalhamentoDestinos(destinos)); }

5 respostas

Olá, Better!

Para resolver a primeira parte da sua dúvida, você pode adicionar uma verificação no método detalhar para verificar se o destino com o nome informado existe no sistema. Se não existir, você pode retornar uma mensagem informando que o destino não foi encontrado. Você pode fazer isso da seguinte maneira:

@GetMapping("/{nome}")
public ResponseEntity detalhar(@PathVariable String nome){
    var destinos = destinosRepository.getDestinoByNome(nome);
    
    if (destinos.isEmpty()) {
        return ResponseEntity.notFound().body("Destino não encontrado");
    }
    
    return ResponseEntity.ok(new DadosDetalhamentoDestinos(destinos));
}

Dessa forma, se o destino não for encontrado, será retornado um status 404 (Not Found) com a mensagem "Destino não encontrado".

Quanto à segunda parte da sua dúvida, para permitir que o usuário pesquise um nome independentemente de letras maiúsculas ou minúsculas, você pode converter o nome informado para um formato padrão antes de realizar a pesquisa. Por exemplo, você pode converter o nome para letras minúsculas usando o método toLowerCase() da classe String. Assim, você pode comparar o nome informado em letras minúsculas com os nomes armazenados no sistema, que também estarão em letras minúsculas. Veja um exemplo:

@GetMapping("/{nome}")
public ResponseEntity detalhar(@PathVariable String nome){
    var nomePesquisado = nome.toLowerCase();
    var destinos = destinosRepository.getDestinoByNome(nomePesquisado);
    
    // Restante do código...
}

Dessa forma, se o usuário informar um nome com letras maiúsculas ou minúsculas, o nome será convertido para letras minúsculas antes de realizar a pesquisa.

Espero ter ajudado e bons estudos!

destinos é uma lista?

@GetMapping("/{nome}") 
public ResponseEntity detalhar(@PathVariable String nome) { 
    var destinos = destinosRepository.findByNomeContaining("%" + nome + "%");
    if(destinos.isEmpty()) {
        return ResponseEntity.notfound().body("Nenhum destino encontrado");
    }
    return ResponseEntity.ok(new DadosDetalhamentoDestinos(destinos)); 
}

destinos é uma lista?

@GetMapping("/{nome}") 
public ResponseEntity detalhar(@PathVariable String nome) { 
    var destinos = destinosRepository.findByNomeContaining("%" + nome + "%");
    if(destinos.isEmpty()) {
        return ResponseEntity.notfound().body("Nenhum destino encontrado");
    }
    return ResponseEntity.ok(new DadosDetalhamentoDestinos(destinos)); 
}

Bom dia pessoal, eu consegui retornar como uma lista quando tiver mais de um retorno, porém eu tentei usar essa linha que vocês mandaram, porém quando eu digito o .body não me deixa ter essa opção: return ResponseEntity.notfound().body("Nenhum destino encontrado")

de fato o codigo nao aceita body. ele devolve apenas um codigo http 404. e voce precisa usar assim:

 ResponseEntity.notfound().build();

o que voce poderia fazer mas nao sei se voce ja sabe fazer. mas da uma pesquisada aqui na alura. é criar um capturador de exceptions. Ai quando a lista estiver vazia ou quando voce nao encontrar um resultado, voce dispara uma exception sua. tipo RecursoNaoEncontradoException. E o capturador de exception devolve para voce algo desse tipo aqui

Insira aqui a descrição dessa imagem para ajudar na acessibilidade