Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Resolução Exercicio 03

Desenvolva um programa em Java que permite aos usuários consultar informações sobre um usuário do GitHub (utilize a API pública do GitHub para obter os dados). Crie uma classe de exceção personalizada, ErroConsultaGitHubException, que estende RuntimeException. Lance essa exceção quando o nome de usuário não for encontrado. No bloco catch, trate de forma específica essa exceção, exibindo uma mensagem amigável.
Essa foi minha resolução:

public class ErroConsultaGitHubException extends RuntimeException{
    public ErroConsultaGitHubException (String mensagem){
        super (mensagem);
    }
}

public record Usuario(String login, String name, String bio) {
}
import com.google.gson.Gson;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        var scanner = new Scanner(System.in);

        System.out.println("Digite o nome do usuario: ");
        String usuario = scanner.nextLine();

        String endereco = "https://api.github.com/users/" + usuario;
        try {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder().uri(URI.create(endereco)).build();
        HttpResponse<String> response = client.send(request,HttpResponse.BodyHandlers.ofString());
        

            validarUsuario(response);
            String json = response.body();


            Gson gson = new Gson();
            Usuario usuarioGitHub = gson.fromJson(json, Usuario.class);

            System.out.println(usuarioGitHub.login());
            System.out.println(usuarioGitHub.name());
            System.out.println(usuarioGitHub.bio());

        } catch (ErroConsultaGitHubException e){
            System.out.println(e.getMessage());
        } catch (IOException | InterruptedException e) {

            System.out.println("Erro ao consultar o GitHub");

        }






    }

    private static void validarUsuario (HttpResponse<String>response){
        if (response.statusCode() == 404){
            throw new ErroConsultaGitHubException("Esse usuario não foi encontrado");

        }

    }
}
1 resposta

Fala, Luis! Tudo bom?

Agradeço por trazer sua solução para o fórum!

Curti demais como trabalhou a exceção personalizada para lidar com erros de consulta em Java, entendeu perfeitamente a importância da validação do status code para identificar quando o usuário não existe e usou bem o HttpClient com Gson para consumir a API do GitHub e transformar o JSON em objeto. Esse cuidado deixa o programa robusto e preparado para lidar com falhas de forma amigável.

E algumas boas práticas que você pode adotar são:

  • Legibilidade: manter mensagens de erro claras e descritivas.
  • Resiliência: tratar diferentes status HTTP para melhorar a experiência do usuário.
  • Generalização: encapsular a lógica de consulta em um método separado para reutilização.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Ah, uma pergunta: você prefere evoluir esse programa para trazer mais informações do perfil (como repositórios e seguidores) ou manter apenas os dados para focar na robustez do tratamento de erros?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!