Gson does not work

Asked

Viewed 134 times

0

I have a WCF service that returns a Json to be consumed in an Android App, as you can see in the link http://wssmartctrgtr.azurewebsites.net/WsSmart.svc/veiculo/201

However, Gson is not working on the specific POJO.

   public class VeiculoContainer implements Serializable  {

    private String idVeiculo;
    private String idTipoVeiculo;
    private String idTransportador;
    private String capacidade;
    private String matricula;
    private String placa;

    private String ctr_Id;
    private String ctr_numero;

    private String idGerador;
    private String gerador_RazaoSocial;
    private String gerador_Fantasia;

    private String transportador;
    private String ctr_DataEmissao;
    private String enderecoDaObra;

    private String localizacao;
    private String motivoReport;

    public String getIdVeiculo() {
        return idVeiculo;
    }

    public void setIdVeiculo(String idVeiculo) {
        this.idVeiculo = idVeiculo;
    }

    public String getIdTipoVeiculo() {
        return idTipoVeiculo;
    }

    public void setIdTipoVeiculo(String idTipoVeiculo) {
        this.idTipoVeiculo = idTipoVeiculo;
    }

    public String getIdTransportador() {
        return idTransportador;
    }

    public void setIdTransportador(String idTransportador) {
        this.idTransportador = idTransportador;
    }

    public String getCapacidade() {
        return capacidade;
    }

    public void setCapacidade(String capacidade) {
        this.capacidade = capacidade;
    }

    public String getMatricula() {
        return matricula;
    }

    public void setMatricula(String matricula) {
        this.matricula = matricula;
    }

    public String getPlaca() {
        return placa;
    }

    public void setPlaca(String placa) {
        this.placa = placa;
    }

    public String getCtr_Id() {
        return ctr_Id;
    }

    public void setCtr_Id(String ctr_Id) {
        this.ctr_Id = ctr_Id;
    }

    public String getCtr_numero() {
        return ctr_numero;
    }

    public void setCtr_numero(String ctr_numero) {
        this.ctr_numero = ctr_numero;
    }

    public String getIdGerador() {
        return idGerador;
    }

    public void setIdGerador(String idGerador) {
        this.idGerador = idGerador;
    }

    public String getGerador_RazaoSocial() {
        return gerador_RazaoSocial;
    }

    public void setGerador_RazaoSocial(String gerador_RazaoSocial) {
        this.gerador_RazaoSocial = gerador_RazaoSocial;
    }

    public String getGerador_Fantasia() {
        return gerador_Fantasia;
    }

    public void setGerador_Fantasia(String gerador_Fantasia) {
        this.gerador_Fantasia = gerador_Fantasia;
    }

    public String getTransportador() {
        return transportador;
    }

    public void setTransportador(String transportador) {
        this.transportador = transportador;
    }

    public String getCtr_DataEmissao() {
        return ctr_DataEmissao;
    }

    public void setCtr_DataEmissao(String ctr_DataEmissao) {
        this.ctr_DataEmissao = ctr_DataEmissao;
    }

    public String getEnderecoDaObra() {
        return enderecoDaObra;
    }

    public void setEnderecoDaObra(String enderecoDaObra) {
        this.enderecoDaObra = enderecoDaObra;
    }

    public String getLocalizacao() {
        return localizacao;
    }

    public void setLocalizacao(String localizacao) {
        this.localizacao = localizacao;
    }

    public String getMotivoReport() {
        return motivoReport;
    }

    public void setMotivoReport(String motivoReport) {
        this.motivoReport = motivoReport;
    }
}

This is the method accountable by popular the POJO:

public VeiculoContainer obterVeiculoContainer(String idVeiculoContainer)   {

    String urlIPCaminhoServico = URLStringsServico.AZURE_CONSULTAR_OBJETO;
    //String urlIPCaminhoServico = URLStringsServico.LOCAL_CONSULTAR_OBJETO;

    VeiculoContainer objVeiculoContainer = new VeiculoContainer();

        String [] params = new String[2];
        params[0] = urlIPCaminhoServico;
        params[1] = idVeiculoContainer;

        String retornoDadosJSON = "";
        Gson gson = new Gson();

        try {
            objVeiculoContainer = gson.fromJson(new ConexaoHTTP().execute(params).get(), VeiculoContainer.class);
            retornoDadosJSON = new ConexaoHTTP().execute(params).get();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
return objVeiculoContainer;
}

The variable "turningsJSON" is receiving as follows:

{"Capacidade":"2","Ctr_DataEmissao":"10\/12\/2016 4:21:57 PM","Ctr_Id":"1","Ctr_numero":"1","EnderecoDaObra":"2","Gerador_Fantasia":"2","Gerador_RazaoSocial":"Gerador","IdGerador":"2","IdTipoVeiculo":"2","IdTransportador":"1","IdVeiculo":"2","Localizacao":null,"Matricula":"201","MotivoReport":null,"Placa":"PLC0002","Transportador":"Administrador"}

Here is the service signature:

[OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "veiculo/{matricula}")]
    ObjVeiculoContainer VeiculoContainer(string matricula);

What may be missing? From now on, thank you.

1 answer

0

The problem is in Fields. GSON does not need and does not use setters and getters, it only needs Fields with the same json name.

For example, for json:

{"KeyNoJson": "Valor"}

You must have:

class Classe {
    public String KeyNoJson; // Percebe o nome do field
}

If you want to have a different name for the field, you can use the Serialized annotation:

class Classe {
    @SerializedName("KeyNoJson")
    public String key;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.