Boa tarde pessoal.
Sou novato no VRaptor e estou tentando implementar um sistema REST com ele. Tenho um front em Backbone.
Quando faço um ajax normal:
$.ajax({
type: "post",
url: painel.apiUrl + "/login",
data: {'usuario.login': 125, 'usuario.senha': "Joaozinho"},
dataType: "json",
success: function(data) {
alert("Sucesso!");
},
error: function() {
alert("Erro!");
}
});
O VRaptor consegue injetar os parâmetros normalmente (imagens abaixo):


Agora, quando faço um save no Backbone, ele manda um REQUEST PAYLOAD, e o VRaptor não consegue mais injetar:


Tentei usar o @Consumes(“application/json”) mas não resolveu. Alguém pode me dar um help nisso?
é que ele tá passando um json… se vc quiser o consumes, o json tem que ser:
{ "usuario": { "login": "xxx", "senha": "yyy" } }
Lucas, obrigado por responder.
Tentei assim, como disse…mas deu um erro que até agora não consegui “decifrar”:
com.thoughtworks.xstream.mapper.CannotResolveClassException: usuario.login
meu código ficou assim:
@Post("/login")
@Consumes
public void login(AdminUsuario usuario) {
Obrigado pela atenção
como é o json que vc está mandando?
Lucas, obrigado pela resposta.
Eu tinha enviado o mesmo exemplo que você postou. O que acontece é que o backbone adiciona os campos DEFAULTS…então, além dele, estava indo os defaults usuario e senha.
Resolvi tirando os defaults. Obrigado
Te falei que o problema era o backbone! muahahaha
Desculpa “reabrir” esse post. Mas estou com muita dificuldade pra manipular o JSON no Vraptor.
Tenho esse JSON sendo enviado por ajax:
{
"indicadorMeta": {
"desc_meta": "meta de teste",
"indindi_id": "16",
"numr_ano": "2014"
},
"indicadorMetaValorList": [
{
"numr_ordem": "1",
"numr_valor": "1200"
}
]
}
Meu método é assim:
@Post("/meta")
@Consumes
public void inserir(IndicadorMeta indicadorMeta, List<IndicadorMetaValor> indicadorMetaValorList) {
sendo que no IndicadorMeta tem os campos desc_meta, indindi_id e numr_ano e no IndicadorMetaValor tem os campos numr_ordem e numr_valor. O indicadorMeta chega preenchido, mas o indicadorMetaValorList não. Aonde errei?
isso só é suportado pelo GSon, e na última versão do VRaptor (talvez no snapshot da 3.5.2)
Você pode atualizar o VRaptor?
https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.5.2-SNAPSHOT/vraptor-3.5.2-20130709.125703-4.jar
e registrar os pacotes de deserialização do gson, no parametro packages do web.xml:
<context-param>
<param-name>br.com.caelum.vraptor.packages</param-name>
<param-value>...., br.com.caelum.vraptor.deserialization.gson</param-value>
</context-param>
ela não ta no repo do maven ainda né?
coloquei a 3.5.1…aproveitei que o projeto ta pequeno e mudei do spring para o google guice…
Para chegar no problema citado acima, passo por outras telas, que agora deu problema depois da alteração…rsrs…
A Verdade é que, ao consultar um GET (uma lista), ele está me retornando diferente.
O meu ambiente é o RESTful com VRaptor mas sem nenhum jsp. Eu queria muito retornar um JSON assim: mas não consegui
{
"total_entries":17,
"data":[
{
"id":"899",
"codg_tipo":"123",
"desc_tipo":"qweweq",
"desc_mascara":""
}
]
}
eu tentei assim:
Retorno retorno = new Retorno();
retorno.setData(indicadorDao.findAllByAttributes(indicador));
retorno.setTotalEntries(indicadorDao.getCount(indicador));
result.use(Results.json()).from(retorno).serialize();
Fiz esse Retorno só para tentar fazer isso…Depois que mudei para a 3.5.1 ele tá me retornando assim agora:
{
object-array: [
{
total_entries: 26
}
]
}
como consigo fazer do jeito mencionado?
a serialização da classe Retorno ficou assim? bem estranho heim
ou vc mandou serializar direto a lista?
Lucas, desculpa!
O object-array foi erro meu. Mas consegui resolver colocando o .recursive()…me retornou exatamente como eu queria!
Voltando ao outro erro, continuou trazendo a lista vazia, meu json enviado:
{
"indicadorMeta":{
"desc_meta":"nome teste",
"indindi_id":"15","numr_ano":"2013"
},
"indicadorMetaValorList":[
{
"numr_valor":"10",
"numr_ordem":"1"
},
{
"numr_valor":"20",
"numr_ordem":"2"
}
]
}
Meu método:
@Post("/meta")
@Consumes
public void inserir(IndicadorMeta indicadorMeta, List<IndicadorMetaValor> indicadorMetaValorList) {
o indicadorMetaValorList continua vazio. É necessário o vraptor 3.5.2 ou o vraptor 3.5.1 era pra funcionar?
coloquei assim no web.xml:
<context-param>
<param-name>br.com.caelum.vraptor.packages</param-name>
<param-value>br.com.caelum.vraptor.deserialization.gson</param-value>
</context-param>
acho que só funciona no 3.5.2 =(
adicione o repositório de snapshot:
http://oss.sonatype.org/content/repositories/snapshots
e mude a versão do VRaptor pra 3.5.2-SNAPSHOT
Feraaaaaa!!
Valeu…só tive que adicionar {“indicadorMetaValor”: para cada objeto da lista, mas já funcionou!!
Obrigado