Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Tentei fazer a minha propria solução, porém não saio desse erro;

Consigo fazer a requisição tudo certinho, mas não consigo armazenar a requisição em uma variável

Meu record Endereço:

package ViaCep.API;


public record Endereco(String cep, String logradouro, String bairro, String localidade, String uf) {
}

Minha classe main:

package ViaCep.API;

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

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 Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
        Gson gson =
                new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).setPrettyPrinting().create();
        String busca = "";

        while(!busca.equalsIgnoreCase("sair")){
            System.out.println("Digite o cep para busca: ");
            busca = leitura.nextLine();
            if (busca.equalsIgnoreCase("sair")){
                break;
            }

            String cep = "https://viacep.com.br/ws/" + busca.replace("-", "" ) + "/json/";

            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(cep))
                    .build();
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());

            String json = response.body();
            System.out.println(json);

            Endereco endereco = gson.fromJson(json, Endereco.class);
            System.out.println(endereco);

        }
    }
}

Output:

Digite o cep para busca: 
58052130
{
  "cep": "58052-130",
  "logradouro": "Rua Francisco Timóteo de Souza",
  "complemento": "",
  "bairro": "Anatólia",
  "localidade": "João Pessoa",
  "uf": "PB",
  "ibge": "2507507",
  "gia": "",
  "ddd": "83",
  "siafi": "2051"
}
Endereco[cep=null, logradouro=null, bairro=null, localidade=null, uf=null]
Digite o cep para busca: 
2 respostas
solução!

Opa amigo, tudo bom, acabei de testar seu código e descobri onde foi o erro encontrado:

O problema acontece na Linha 18 da Classe Main:

 new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).setPrettyPrinting().create();

Retirando o método:

setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)

Tudo volta a funcionar como deveria.

A interferência está no UPPER_CAMEL_CASE que vai definir teus atributos da Record no formato UPPER_CAMEL_CASE (assim: Cep, Logradouro, Bairro), aí vai entrar em conflito porque ele recebe "cep" e quer atribuir a "Cep", então da ruim.

Tentei ser breve e explicativo. Qualquer dúvida pode perguntar...

Funcionou, vlw msm!