Olá, Pedro Henrique. Como vai?
Parabéns pelo excelente projeto! O seu código está muito bem estruturado e demonstra que você compreendeu perfeitamente a arquitetura moderna de consumo de APIs em Java.
O fluxo que você montou é o padrão de mercado: criar o cliente HTTP (HttpClient), disparar a requisição (HttpRequest), capturar a resposta em formato JSON (HttpResponse) e utilizar a biblioteca Gson para desserializar esse JSON.
O grande destaque do seu código vai para o uso do TituloOmdb (provavelmente um Record) para fazer o mapeamento direto do JSON e, em seguida, transferir esses dados para a sua classe de domínio Titulo. Essa separação entre um objeto de transferência de dados (DTO) e as regras do seu sistema é uma das melhores práticas mais valiosas na engenharia de software!
Para enriquecer o seu projeto e apoiar a sua evolução nos próximos capítulos — que abordam justamente o tratamento de erros —, separei duas dicas fundamentais para você blindar o seu código:
1. Lidando com Espaços na Busca da API
Repare nesta linha do seu código:
String endereco = "https://www.omdbapi.com/?t=" + busca + "&apikey=chave";
Se o usuário digitar um filme com nome composto, como por exemplo "The Matrix", a variável endereco vai virar .../?t=The Matrix.... O problema é que espaços em branco não são caracteres válidos em URLs e podem fazer a requisição falhar ou retornar um erro dependendo de como o cliente HTTP interpreta o texto.
Para deixar seu programa 100% robusto contra nomes de filmes compostos, a boa prática em Java é codificar o texto digitado usando a classe URLEncoder. Isso substitui os espaços por %20 ou + automaticamente:
// Importe java.net.URLEncoder e java.nio.charset.StandardCharsets
String buscaCodificada = URLEncoder.encode(busca, StandardCharsets.UTF_8);
String endereco = "https://www.omdbapi.com/?t=" + buscaCodificada + "&apikey=chave";
2. Preparando o Terreno para o Tratamento de Erros
No momento, o seu método main está usando a cláusula throws IOException, InterruptedException. Isso significa que se a API do OMDB estiver fora do ar, se a internet cair ou se o usuário digitar uma chave de API inválida, o seu programa vai estourar um erro na tela e fechar abruptamente (crash).
Como o próximo passo do seu curso é lidar com erros, o ideal no futuro será remover esses throws da assinatura do método e envelopar o bloco de requisição e conversão do Gson em uma estrutura try-catch.
Veja um vislumbre de como o seu código vai ganhar um comportamento muito mais profissional em breve:
try {
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
String json = response.body();
TituloOmdb meuTituloOmbdb = gson.fromJson(json, TituloOmdb.class);
Titulo meuTitulo = new Titulo(meuTituloOmbdb);
System.out.println(meuTitulo);
} catch (IOException | InterruptedException e) {
System.out.println("Erro de conexão ao tentar buscar o filme: " + e.getMessage());
} catch (JsonSyntaxException e) {
System.out.println("Erro ao converter o JSON recebido. Verifique os dados.");
}
O repositório no seu GitHub está super organizado e o código limpo. Parabéns pela consistência e dedicação nos estudos do ecossistema Java!
Espero que possa ter lhe ajudado!