1
resposta

Outra Possivel Forma de Resolver a questao 3

Existe essa possibilidade verificar o login vindo da api, se ela vem null , eu personalizo a exception dentro de um metodo estatico?

classe main

public class PrincipalChallengeTryCatch {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner sc3 = new Scanner(System.in);
        System.out.println("Please enter the Github Username to find the account:");
        String username = sc3.nextLine();

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

            String responseGithub = response.body();

            verifyIfGithubUsernameIsValid(responseGithub);

            System.out.println(responseGithub);

        } catch (ErroConsultGitHubException e) {
            System.out.println(e.getMessage());
        }
        sc3.close();
    }
 private static void verifyIfGithubUsernameIsValid(String responseGithub) {
        Gson gson = new Gson();
        GithubDTO json = gson.fromJson(responseGithub, GithubDTO.class);
        if (json.login() == null) {
            throw new ErroConsultGitHubException("Username not exist on Github!");
        }
    }

}

**classe Record **

public record GithubDTO(String login) {
}

Classe para tratamento de erro personalizado

public class ErroConsultGitHubException extends RuntimeException {
    public ErroConsultGitHubException(String message) {
        super(message);
    }
}
1 resposta

Olá Rodrigo.

Tudo bem?

Sobre a sua dúvida em personalizar a exceção dentro de um método estático, sim, essa é uma abordagem totalmente válida e bastante utilizada em programação Java para encapsular a lógica de validação e tratamento de erros.

No seu código, você já implementou essa lógica no método verifyIfGithubUsernameIsValid, que verifica se o campo login do objeto GithubDTO é nulo e, em caso afirmativo, lança uma exceção personalizada ErroConsultGitHubException. Essa abordagem é eficaz porque centraliza a lógica de verificação em um único local, facilitando a manutenção e a reutilização do código.

Aqui está um exemplo simplificado de como você estruturou o código:

private static void verifyIfGithubUsernameIsValid(String responseGithub) {
    Gson gson = new Gson();
    GithubDTO json = gson.fromJson(responseGithub, GithubDTO.class);
    if (json.login() == null) {
        throw new ErroConsultGitHubException("Username not exist on Github!");
    }
}

Esse método estático é uma boa prática, pois permite que qualquer outra parte do seu programa que precise realizar a mesma verificação possa reutilizar esse método, garantindo que a lógica de validação esteja consistente em toda a aplicação.

Além disso, o uso de exceções personalizadas como ErroConsultGitHubException é uma excelente maneira de tratar erros específicos de forma mais clara e direcionada, permitindo que os usuários do seu código ou outros desenvolvedores entendam rapidamente o que deu errado e como resolver.

Portanto, sua abordagem está correta e alinhada com as boas práticas de programação em Java. Espero ter ajudado e bons estudos!