JSON como Parâmetro de Requisição - VRaptor

11 respostas
M

Pessoal,

Estou usando o jqGrid que manda um JSON como parâmentro de requisição, no servidor eu teria que receber isso e acessar os parâmentros desse JSON, isso é possível?

Exemplo de QueryParameter que a grade envia:

{
	"groupOp":"AND",
	"rules":[
		{
			"field":"codigo",
			"op":"bw","data":"2"
		},
		{
			"field":"nome",
			"op":"bw",
			"data":"Marcelo Ribeiro"
		}
	]
}

Estou usando o vraptor no serverside.

obrigado.

Marcelo

11 Respostas

M

Pessoal,

Será que o VRaptor não tem nenhuma forma de decodificar um JSON?
Existe alguma outra forma de fazer isso?

Encontrei esse FlexJSON que é bem simples, mas gostaria de evitar de sair das funcionalidades do framework vraptor.

Abs.

Marcelo

Lucas_Cavalcanti

é um parâmetro que tem um json, ou é um json no corpo da requisição?

M

Exatamente Lucas,

É um parâmetro com um JSON…

Gostaria de fazer com vraptor é possível?

Abs.

Marcelo

Lucas_Cavalcanti

dá uma olhada nesse post:

esse cara fez uma solução parecida com o que vc quer.

se vc não precisar receber listas como json, fica mais simples ainda.

M

Olá Lucas,

Meu amigo, espero chegar lá um dia… rsrsr mas não entendi nada… Sou novo no JAVA, então tem muitas coisas obscuras ainda…

Se tivesse uma maneira mais didática de seria legal, mas sei que não posso pedir isso aqui no fórum.

O que não entendo é quem faria o papel de converter esse JSON que estou recebendo para uma lista e me devolver essa lista, de forma que eu possa iterar por ela buscando a chave do que eu preciso.

Exemplo: Esse é o JSON que recebo:

{"groupOp":"AND","rules":[{"field":"codigo","op":"bw","data":"2"},{"field":"nome","op":"bw","data":"Jesus"}]}

Gostaria de receber uma lista, de forma que eu possa buscar todos os “field” = “codigo”, então ele me retornaria “dois”, ou seja, “codigo e nome”, a partir daí eu faço o que for preciso, entende.

Mas esse lance de sobrescrever funcionalidades do vraptor não faço idéia ainda, existe algum blog ou material que poderia me ajudar?

Muito obrigado pela ajuda!

Abs.

Marcelo

Lucas_Cavalcanti

crie uma classe chamada JSON (ou algo parecido),

crie um converter pra essa classe, que recebe a string e transforma na estrutura que vc quer…

pra isso vc pode usar o xstream, o jackson ou o gson, que são bibiliotecas que deserializam JSON.

vc não precisa chegar na parte de sobrescrever funcionalidades, só da parte de conversão
http://vraptor.caelum.com.br/documentacao/conversores/

M

Caramba Lucas,

Vc. realmente é o cara… Muito obrigado pela ajuda, agora está clareando, estou estudando o xstream e estou vendo que parece ser simples mesmo, só um detalhe:

Estou vendo um exemplo usando xstream, mas na sua inicialização eu devo informar o driver:

XStream xstream = new XStream(new JettisonMappedXmlDriver());

Nesse caso ele usa esse JettisonMappedXMLDriver, eu preciso então baixar esse cara o vraptor oferece algo?

Mais uma vez obrigado!!!

Abs.

Marcelo

Lucas_Cavalcanti

vc precisa baixar o jar do Jettison, é o que o xstream usa pra deserializar json.

M

Perfeito Lucas,

Então bate com o que eu estou pensando, o único pro agora é que o o JSON que eu recebo, obrigatóriamente tenho que ter uma classe para atribuir os dados deserializados para a classe, mas e se eu não quiser criar classe nenhum, quero receber o JSON, manipular seus dados e fazer alguma coisa???

Esse é o exemplo que estou vendo aqui:

public static void main(String[] args) {
	String json = "{\"product\":{\"name\":\"Banana\",\"id\":\"123\"" + ",\"price\":\"23.0\"}}";
		    
	XStream xstream = new XStream(new JettisonMappedXmlDriver());
	xstream.alias("product", Product.class);
	Product product = (Product)xstream.fromXML(json);
	System.out.println(product.getName());
}

Outro detalhe, é que o JSON que eu recebo “na real” vem com uma lista, aí acredito que esse exemplo já não funcionaria, certo?

Abs.

Marcelo

Lucas_Cavalcanti

tem bibliotecas que te retornam um Map<String, Object>, como o jackson… vc pode usar uma delas.

M

Perfeito Lucas,

Vou me aprofundar nessa biblioteca então, muito obrigado!

Espero um dia poder ajudar a galera como você faz…

Grande abraço.

Marcelo

Criado 7 de julho de 2012
Ultima resposta 9 de jul. de 2012
Respostas 11
Participantes 2