Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

estou com duvida no projeto alura flix

exercicio pede que eu faça da seguinte maneira Criar uma rota que busque vídeos por nome via query parameters, por exemplo: GET /videos/?search=jogos, aqui esta meu controller e meu repository Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidadese eu coloco dessa maneira eu consigo o resultadoInsira aqui a descrição dessa imagem para ajudar na acessibilidade

se eu coloco a query dessa maneira ela da erro Ise eu coloco a query dessa maneira ela da erro se eu coloco sem barra ela lista todas as musicadas cadastradas Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá Wesley! Tudo bem?

Primeiro, no seu VideoController, você precisa ajustar a anotação @GetMapping para aceitar query parameters. Atualmente, você está utilizando @PathVariable, mas para query parameters, utilizamos @RequestParam.

Aqui está um exemplo de como você pode fazer isso:

@GetMapping("/videos")
public ResponseEntity buscarPorTituloIgnoreCase(@RequestParam(value = "search", required = false) String titulo) {
    if (titulo != null) {
        var video = repository.findByTituloContainingIgnoreCase(titulo);
        return ResponseEntity.ok().body(new DadosDetalhamentoVideo(video));
    } else {
        // Se não houver parâmetro de busca, retorne todos os vídeos ou uma mensagem de erro
        var videos = repository.findAll(); // ou outro método para listar todos os vídeos
        return ResponseEntity.ok().body(videos);
    }
}

No seu VideoRepository, o método findByTituloContainingIgnoreCase está correto. Ele já está configurado para buscar vídeos pelo título ignorando maiúsculas e minúsculas.

Agora, no Postman, você deve fazer a requisição da seguinte maneira:

GET http://localhost:8080/videos?search=jogos

Com essas alterações, a rota deve funcionar corretamente para buscar vídeos pelo nome utilizando query parameters.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

cara obrigado deu certo sim, so mais uma duvida quando é um nome com espaço na url estou fazendo da seguinte maneira porem esta dando erro

    public ResponseEntity buscarPorTituloIgnoreCase(String titulo) {
        if (titulo != null) {
           titulo.replace(" ","+");
            var video = videoRepository.findByTituloContainingIgnoreCase(titulo);
            return ResponseEntity.ok().body(new DadosDetalhamentoVideo(video));
        } else {
            var videos = videoRepository.findAll();
            return ResponseEntity.ok().body(videos);
        }
    }
solução!

Opa Wesley, tudo bem?

Fico feliz que deu certo! Agora, sobre sua dúvida, quando você tenta substituir os espaços no titulo por "+", isso não é a abordagem correta para URLs, pois o símbolo de espaço em URLs é geralmente codificado como %20, e não como "+".

No entanto, o Spring Boot já faz automaticamente a codificação correta de parâmetros quando você passa pela URL, então você não precisa fazer essa substituição manual. O problema pode estar vindo de outro lugar.

Aqui vai uma sugestão simples: verifique se o parâmetro titulo está sendo corretamente enviado na URL (por exemplo, algo como .../videos?titulo=O+Poderoso+Chefao), sem necessidade de substituir o espaço manualmente no código.

Se o erro persistir, pode ser interessante verificar como você está chamando o método na URL ou revisar os logs para ver o que está sendo recebido pelo servidor.

Espero que isso ajude!