VRaptor com post de jQuery + Ajax

Prezados,

Iniciei um projeto do zero (para aprendizado/teste) utilizando as últimas versões do VRaptor3 e jQuery.
Não estou conseguindo enviar uma requisição Ajax com dados para o controlador.

Utilizando chamadas via Ajax, consigo receber sem problemas do Controller, mas para enviar para o Controller (estou usando POST) não está dando certo.
Já procurei em uma porrada de lugar e ainda não consegui resolver o problema, como estou utilizando ferramentas recentes, a solução pode ser diferente e por isso resolvi postar.

View - javascript da requisição Ajax

    function inserirVeiculo() {
    	var dados = "{nome = 'palio'}"; 
        $.ajax({
            url: 'inserirVeiculoJson',
            data: dados,
            type: "post",
            dataType: "json",
            contentType: "application/json;",
            success: handleSuccess,
            error: handleError
        });
    }

Controller

@Consumes(value={"application/json"})   // ou @Consumes("application/json")
@Post 
public void inserirVeiculoJson(Veiculo veiculo){
	...
}
	

Exception

CannotResolveClassException: nome : nome

Já passei por outras exceptions tb (413, 500, nas últimas tenho recebido ‘internal server error’).
Já tentei alterar o formato dos dados enviados várias vezes (acho q por isso das outras exceptions tb)

"{nome = 'palio'}"; 
"{nome = palio}"; 
"{nome : 'palio'}"; 
"{nome : palio}"; 
...

Valeu!

você precisa que a raiz do objeto tenha o mesmo nome do parametro, no caso:

{"veiculo": {"nome": "palio"}}

deveria funcionar

Isso, consegui resolver mas ainda não de uma forma muito legal, por isso não postei a solução ainda.

O problema é que se eu tento enviar um objeto, ou um form tipado, ex:

var veiculo = new Object();
        veiculo.nome = "palio";
        veiculo.placa =  "PLC - 55555";
        

E serializando pra enviar no formato JSON, o “stringify” não inclui a raiz da notação com o nome do objeto, ficando

JSON.stringify(veiculo)  - resulta em - {"nome": "palio"}

Por enquanto fiz na mão mesmo e deu certo…

'{veiculo:'+JSON.stringify(veiculo)+'}'; 

Tive q parar de ver isso pra ver outras coisas, se eu conseguir uma solução melhor posto depois, agradeço se alguém já souber uma solução mais elegante.

Obrigado Lucas!

o motivo disso é que o JSON.stringfy não vai conseguir ler o nome da variável :wink: o objeto veiculo é só {nome: “palio”} mesmo

vc pode tentar fazer:

JSON.stringify({veiculo: veiculo});

fica menos feio do que colocar dentro de uma string

Bem melhor :slight_smile:
Valeu!!!