Vraptor erros ao deserializar json + post

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
@Path("/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…

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

Alias,

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

Grato!!

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

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":...}]}

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

grato

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.

tenta criar a classe encapsulando essa lista, deve funcionar.

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

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

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

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

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

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.

Vou fazer os testes. grato