Na main, estou tendo um problema na hora de criar a seguinte variável:
String CEP = userInput;
CheckCep userInfo = new CheckCep();
CepInfo jsonAsObjectOfCepInfo = userInfo.returnCepInfo(CEP); ---> erro
userInput é o CEP que o usuário insere; CepInfo é a classe record; e CheckCep é a classe contendo a função returnCepInfo, que faz todo o processo da requisição e conversão para JSON, e retorna um objeto da classe CepInfo. Aqui está a classe CheckCep:
package br.com.alura.models;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.lang.reflect.Type;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CheckCep {
public CepInfo returnCepInfo(String cep) throws IOException, InterruptedException {
String URL = "https://viacep.com.br/ws/"+cep+"/json/";
Gson gson = new GsonBuilder().create();
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(URL))
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
String jsonFileWithAddress = response.body();
CepInfo jsonAsObjectOfCepInfo = gson.fromJson(jsonFileWithAddress, CepInfo.class);
return jsonAsObjectOfCepInfo;
}
}
Quando eu rodo a classe main, a seguinte mensagem aparece:
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:397)
at com.google.gson.Gson.fromJson(Gson.java:1227)
at com.google.gson.Gson.fromJson(Gson.java:1137)
at com.google.gson.Gson.fromJson(Gson.java:1047)
at com.google.gson.Gson.fromJson(Gson.java:982)
at br.com.alura.models.CheckCep.returnCepInfo(CheckCep.java:32)
at br.com.alura.models.Main.main(Main.java:68)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:393)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:386)
```
A linha 32 da classe CheckCep é onde há a conversão de JSON para CepInfo:
```
CepInfo jsonAsObjectOfCepInfo = gson.fromJson(jsonFileWithAddress, CepInfo.class);
```
Pelo que tudo indica, há um problema com a conversão, mas eu não faço ideia qual.