Vraptor erros ao deserializar json + post

12 respostas
ellsoncosta

Pessoa estou utilizando vraptor para deserializar os meu json, via post, mais esta ocorrendo os seguinte erro.

com.thoughtworks.xstream.converters.ConversionException: varejo_atacado : varejo_atacado : varejo_atacado : varejo_atacado
---- Debugging information ----
message : varejo_atacado : varejo_atacado
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : varejo_atacado : varejo_atacado
class : java.util.ArrayList
required-type : java.util.ArrayList
line number : -1

com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:89)
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:76)
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:60)
com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:137)
com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:33).....

meu json:

{ “vendas”: [

{

“varejo_atacado”:1,“caixa”:1,“cnpj_cpf”:“34.325.753/0001-99,“o_v”:“1,“numero_parcela”:0,“com_ind”:“1,“comentrada”:“N,“numero_nf”:-1,“desouac”:“0,“numdias”:0,“efd_imp_vllqitem”:“N,“especial”:“B,“frete”:0,“hora”:“10:11:10,“nome_usuario”:"",“lancado_fina”:“Nao,“nome_cliente”:“JOSE OLIVEIRA SOUZA DE ITUBUA,“interexter”:1.0,“ecf_coo”:0.0,“desconto”:0.0,“codigo_vendedor”:21,“codigo_venda”:2268558,“codigo_plano”:21,“codigo_loja”:1,“codigo_ecf_info”:0,“codigo_departamento”:0,“sequencia”:2268558,“codigo_cliente”:678,“total_venda”:95.0,“troco”:0.0,“txjuros”:0.0,“v_pago”:0.0,“v_produto”:95.0,“acrescimo”:0.0

}

]

}

meu metodo resource:

@Post

<a class="mention" href="/u/path">@Path</a>("/inserir")	

@Consumes(“application/json”)

public void adiciona(List vendas)

{

System.out.println(“Recebendo json”);
if (vendas != null) 
	{
		System.out.println("dentro if");	
		System.out.println("Quantidade vendas: " + Integer.toString(vendas.size()));			
		new VendaDao().Insert(vendas);
	}
	......

Classe bean;

public class VendaBean implements Serializable

{

private static final long serialVersionUID = 5747062437277909008L;
private long codigo_venda;
private long codigo_loja;
private String o_v;
private Date emissao;
private long codigo_vendedor;
private long codigo_cliente;
private float v_produto;
private float desconto;
private float acrescimo;
private String desouac;
private float total_venda;
private String cupom;
private String nome_cliente; 
private String cnpj_cpf;
private Date mapa;
private String observacao;
private float interexter;
private Integer varejo_atacado;
private Integer frete;
private long codigo_plano;
private float txjuros;
private Integer numero_parcela;
private Integer numdias;
private String comentrada;
private String especial;
private Integer caixa;
private String hora; 
private String nome_usuario;
private Date data_baix_com;
private String select_atacado;
private String gerou_nf_atacado;
private String imp_ped_atacado;
private Integer numero_nf;
private Date data_faturamento;
private String lancado_fina; 
private Date data_lan_fin;
private String com_ind;
private long sequencia;
private long codigo_departamento;
private float v_pago;
private float troco;
private long codigo_ecf_info;
private String fppdv_balcao;
private float ecf_coo;
private String ordem_desc_acres; 
private String tipo_arred_trunc;
private String ecf_fabricacao;
private Date data_imp_cf;
private Date hora_imp_cf;
private String efd_imp_vllqitem;

@XStreamAlias("itens")
private List<ItensVendaBean> itens;

@XStreamAlias("orc_parc")
private List<OrcParcBean> orc_parc;

getters e setters …

Se alguém poder me ajudar, ficarei grato…

12 Respostas

alias

Amigo, você pode postar essa classe VendaBean? Pela exceção lançada, ela nao está compatível com a estrutura do json.

ellsoncosta

Alias,

Já criei uma classe bean com com apenas (nome, idade) e da o mesmo erro, quando vai desserializar.

Grato!!

alias

Hm…você tentou colocar um root em cada elemento dessa lista? Não estou me recordando se o vraptor consegue fazer sem o root (ou o contrario)

tipo assim

{ "vendas": [
    { "vendaBean": {
        "varejo_atacado":"1",...
     },
     { "vendaBean": {
        "varejo_atacado":"1",...
      }

edit: não obstante essa questão do root, repare no seu json. Não é um array, e sim um objeto “vendas” que contem um array. Não vai bater com um List

Lucas_Cavalcanti

Então, receber uma lista como JSON é meio complicado pq fica difícil configurar os tipos da lista no XStream, automaticamente.

Tenta criar uma classe que faz esse wrap:

public class Vendas {
    @XStreamImplicit
    private List<VendaBean> vendas;
    //getters e setters
}

e receba essa classe:

@Post("/inserir")	
@Consumes("application/json") 
public void adiciona(Vendas vendas) 
{

daí vai talvez funcione o json:

{ "vendas": [{"nome": ...}, {"nome":...}]}

ou ainda:

{ "vendas": [{"vendaBean": {....}}, {"vendaBean":...}]}
ellsoncosta

Pessoa vou fazer os testes, posto mais tarde os resultado.

grato

ellsoncosta

Olá Lucas,

Rapa utilizando o VRaptor pra 3.5.2-SNAPSHOT, eu consigo dessserializar um objeto vendaBean, mais uma lista de objetos VendaBean, ele não consegue desserializar.

Lucas_Cavalcanti

tenta criar a classe encapsulando essa lista, deve funcionar.

ellsoncosta

Lucas, já fiz esse teste também, mais não funcionou.

Lucas_Cavalcanti

como vc criou a classe da lista e como vc está mandando o json?

ellsoncosta

Lucas já tentei enviar das duas formas que você mostrou no exemplo e nada.

{ “vendas”: [{“nome”: …}, {“nome”:…}]}

{ “vendas”: [{“vendaBean”: {…}}, {“vendaBean”:…}]}

Lucas_Cavalcanti

tenta dessas duas formas, mas com um outro nó de vendas:

{"vendas" : { "vendas": [{"nome": ...}, {"nome":...}]} }

{"vendas" : { "vendas": [{"vendaBean": {....}}, {"vendaBean":...}]}}

se ainda assim não funcionar, dá pra tentar criar um custom deserializer.

ellsoncosta

Vou fazer os testes. grato

Criado 23 de julho de 2013
Ultima resposta 25 de jul. de 2013
Respostas 12
Participantes 3