1
resposta

[Dúvida] Informações na main

Olá, é uma boa prática colocar um try-catch na main? Estava tratando a exceção do CEP inválido no código e não sei se essa é uma abordagem correta.

public class ConsultaApi {

    public CepInfo requisicao (String cep) throws InterruptedException, IOException, ErroCepInvalido {

        if (cep.length() < 8) {
            throw new ErroCepInvalido ("Erro: O CEP não é válido");
        }
        String endereco = "https://viacep.com.br/ws/"+ cep +"/json/";
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endereco))
                .build();

        HttpResponse<String> response = null;
        try {
            response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
        } catch (IOException | InterruptedException e) {
            throw new RuntimeException("Erro ao obter informações do CEP");
        }

        return new Gson().fromJson(response.body(), CepInfo.class);
    }

}
public class Main {
    public static void main(String[] args) throws IOException, InterruptedException, ErroCepInvalido {
        ConsultaApi consulta = new ConsultaApi();
        Scanner scanner = new Scanner(System.in);
        try {
            CepInfo novoCepinfo = consulta.requisicao("65268000");
            System.out.println(novoCepinfo);
        }catch (ErroCepInvalido e) {
            System.out.println(e.getMessage());
        }
}
1 resposta

Oii, Débora. Parabéns pela sua resolução. Ficou bem legal :)

Respondendo sua pergunta é uma boa prática sim usar try-catch na main. Não vejo problema.

Uma outra forma que você poderia fazer é criar uma classe Cep, e ela fosse responsável por realizar essa validação. Por exemplo:

public class CEP {
    private String cep;

    public CEP(String cep) throws ErroCepInvalido {
        if (cep == null || cep.length() < 8) {
            throw new ErroCepInvalido("Erro: O CEP não é válido");
        }
        this.cep = cep;
    }

    public String getCep() {
        return cep;
    }

}

Dessa forma fica melhor para usar Cep em outros lugares da aplicação, pois a classe CEP além de carregar a informação do CEP, sabe como realizar a validação.

Espero ter ajudado e bons estudos :)