Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Tratamento de erros

Não sei se será abordado o tema mas uma coisa que notei foi ao pesquisar filmes que é uma frase por exemplo mad max, se escrito dessas formas:

  • Mad Max
  • Mad max
  • mad Max
  • Mad Max

E qunado escrito mad_max (acredito que o _ representa o espaço entre as palavras) tem o retorno da API, dava um erro de execução no meu código que acho que é de exceção:

Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in query at index 30: https://www.omdbapi.com/?t=Mad max&apikey=90d873fe
    at java.base/java.net.URI.create(URI.java:932)
    at br.com.alura.screenmatch.principal.PrincipalComBusca.main(PrincipalComBusca.java:20)
Caused by: java.net.URISyntaxException: Illegal character in query at index 30: https://www.omdbapi.com/?t=Mad max&apikey=90d873fe
    at java.base/java.net.URI$Parser.fail(URI.java:2995)
    at java.base/java.net.URI$Parser.checkChars(URI.java:3166)
    at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3254)
    at java.base/java.net.URI$Parser.parse(URI.java:3196)
    at java.base/java.net.URI.<init>(URI.java:645)
    at java.base/java.net.URI.create(URI.java:930)
    ... 1 more

Como tratar esse tipo de busca onde temos termos que podem ser buscados por frases e não palavras unicas?

1 resposta
solução!

Bom dia. Para tratar esse erro, o problema tá no espaço presente no termo de busca. O espaço precisa ser codificado corretamente na URL, pois não é um caractere permitido em URIs. No seu caso, o erro ocorre porque Mad max está sendo interpretado literalmente, e o Java não consegue processar isso.

Pra resolver, você pode usar a classe URLEncoder para codificar o termo de busca. O espaço ( ) será convertido para %20 ou +, que são formas válidas de representá-lo em URLs.

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class PrincipalComBusca {
    public static void main(String[] args) {
        try {
            String busca = "Mad max";
            String buscaCodificada = URLEncoder.encode(busca, "UTF-8");
            
            String url = "https://www.omdbapi.com/?t=" + buscaCodificada + "&apikey=90d873fe";
            System.out.println("URL gerada: " + url);
            
            // aqui vc faz a requisição HTTP normalmente
        } catch (UnsupportedEncodingException e) {
            System.out.println("Erro ao codificar a URL: " + e.getMessage());
        }
    }
}
  1. URLEncoder.encode(busca, "UTF-8"): Codifica o termo de busca para garantir que todos os caracteres especiais (espaços, acentos, símbolos) sejam convertidos para uma forma válida.
  2. URL gerada: Agora a URL será algo como https://www.omdbapi.com/?t=Mad%20max&apikey=90d873fe, que não gera mais a exceção.