[RESOLVIDO] Como usar GSON em Java?

Pessoal, boa noite.

Venho através desse tópico, passar a seguinte situação para vocês: Eu gosto de fazer algumas aplicações em Java Swing, e na faculdade ouvi falar sobre WebServices, então decido aprender um pouco, já que não atuo na área de programação pensei que seria interessante aprender um pouco, encontrei um WebService que retorna os logradouros neste link: https://viacep.com.br/ws/RS/Porto%20Alegre/Domingos/json/
Quero extrair os dados e criar objetos em Java, ouvir falar sobre a API GSON do google e tentei implementar no Java porem sem sucesso, veja o código com exemplos que tirei da internet.

 @SuppressWarnings("empty-statement")
        private ArrayList<LogradouroJson> sendGet(String UF, String Cidade, String Rua) throws Exception {
 
                ArrayList<LogradouroJson> logradouros = null;
                LogradouroJson l = new LogradouroJson();
                
		String url = "https://viacep.com.br/ws/"+UF+"/"+Cidade+"/"+Rua+"/json/";
                
 
		URL obj = new URL(url);
		HttpURLConnection con = (HttpURLConnection) obj.openConnection();
 
		con.setRequestMethod("GET");
 
		con.setRequestProperty("User-Agent", USER_AGENT);
 
		int responseCode = con.getResponseCode();
 
            try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())))
            {
                String inputLine;
                StringBuilder response = new StringBuilder();
                
                while ((inputLine = in.readLine()) != null)
                {
                    response.append(inputLine);
                }
                
                Gson g = new GsonBuilder().create();
                Type type = new TypeToken<ArrayList<LogradouroJson>>(){}.getType();
                logradouros = g.fromJson(response.toString(), type);
                
            }
            
            for(LogradouroJson logradouroJson: logradouros){
                System.out.println(logradouroJson.getLogradouro());
            }
            
            return logradouros;
	}

O retorno dentro do for para todos os objetos é null, como devo utilizar a API?

Vamos lá, você pode fazer em dois métodos diferentes, assim desse jeito que você fez, vai te confundir:

public String sendGet(String url, String method) throws Exception {
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod(method);
    con.setRequestProperty("User-Agent", USER_AGENT);

    int responseCode = con.getResponseCode();
    System.out.println("\nEnviando requisição '" + method + "' para a URL: " + url);
    System.out.println("Resposta: " + responseCode);

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    System.out.println("Dados Recebidos: " + response.toString());
    return response.toString();
}

Aí o método para buscar:

public void buscar(String nome) {
    try {
        String url = "sua_url"
        String json = sendGet(url, "GET");
        Gson g = new Gson();

        ClasseModelo u = new ClasseModelo();
        java.lang.reflect.Type userType = new TypeToken<ClasseModelo>() {
        }.getType();
        u = g.fromJson(json, userType);

        System.out.println(u.getNome());
        System.out.println(u.getEstado());
    } catch (Exception ex) {
        Logger.getLogger(HttpExemplo.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Mas o ViaCEP já tem uma API pronta pra uso, você não prefere usar ela?

Com a API deles ficaria assim:

    ViaCEP viacep = new ViaCEP();
    try {
        viacep.buscar(campocep.getText());
        campoendereco.setText(viacep.getLogradouro());
    } catch (ViaCEPException ex) {
        JOptionPane.showMessageDialog(null, "Não foi possível localizar o CEP!");
    }
2 curtidas

Muito obrigado, eu não me atentei sobre já existir a API, queria modificar um pouco o código para entender o funcionamento e aprender como manipular os dados no WebService, estou utilizando a API pronto, assim como você disse.

1 curtida