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

parser Gson lendo http response

Olá! Estou desenvolvendo uma aplicação com spring boot onde deixo uma porta de um socket (não é websocket é socket mesmo) em listening quando envio via postman uma requisição e um json no corpo do programa e tento fazer o parser utilizando Gson para meu objeto java como mostra o código da um erro:

BufferedReader buffer = new BufferedReader(new InputStreamReader(input));

        ClientRequest clientRequest = gson.fromJson(buffer, ClientRequest.class);
           System.out.println(clientRequest.getAction() + ", " + clientRequest.getCardnumber() + ", " + clientRequest.getAmount());

o erro que mostra é o seguinte:

Exception in thread "pool-5-thread-1" Exception in thread "pool-5-thread-2" java.lang.NullPointerException
    at br.com.cartaoprepago.server.WorkerRunnable.Requicao(WorkerRunnable.java:63)
    at br.com.cartaoprepago.server.WorkerRunnable.run(WorkerRunnable.java:38)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
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:226)
    at com.google.gson.Gson.fromJson(Gson.java:927)
    at com.google.gson.Gson.fromJson(Gson.java:865)
    at br.com.cartaoprepago.server.WorkerRunnable.Requicao(WorkerRunnable.java:62)
    at br.com.cartaoprepago.server.WorkerRunnable.run(WorkerRunnable.java:38)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
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:385)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)

Imagino que ele não entenda que é um json por conta do cabeçario http, mas eu não sei como ignorar o cabeçario.

alguem poderia me auxiliar???????

2 respostas
solução!

O gson está esperando que seu JSON comece com uma chave de abertura de objeto {. Porém, está vindo uma string ".

Bom dia! Entendi Muito obrigado pela resposta! Mas tem alguma dica ou indicação de material para leitura onde eu possa parsear isso? ou seja, conseguir pegar apenas o json do body da requisição????