Multiplos valores Json + vraptor 3

3 respostas
jingle

Olá estou com seguinte duvida como faço para conseguir um json assim:
descricao : valor

os exemplos que vi eram tudo com algo do tipo
criar um objeto que tem os campos descricao e outro valor… e dai serializar o objeto

o que dari algo ± assim :

o que não me adianta =S

já tentei algo assim:

result.use(Results.json()).from("rafael", "1").serialize(); result.use(Results.json()).from("eduardo", "2").serialize();

mas não deu certo.

grato.

3 Respostas

Lucas_Cavalcanti

jingle:
Olá estou com seguinte duvida como faço para conseguir um json assim:
descricao : valor


isso não é json válido… o que vc quis dizer é isso?

serializando um HashMap<String,String>, vc teria algo assim:

[ ["rafael", "1"], ["eduardo", "2"] ]

se vc quiser algo diferente disso você pode criar um converter pra sua entidade,
daí pode ficar do jeito que vc quer…

se precisar de ajuda pra fazer esse converter me dá um toque

jingle

é preciso realmente fazer um assim :

{"rafael":"1", "eduardo":"2"}

aquele com map não me adiantou…

consegue me da uma mão pra criar o converter?

Lucas_Cavalcanti

acho que isso resolve:

public class MeuMapConverter implements Converter {

	@Override
	public boolean canConvert(Class clazz) {
		return Map.class.isAssignableFrom(clazz);
	}
	
	public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
		writer.startNode("map");
		Map<?,?> map = (Map<?,?>) obj;
		for (Entry<?,?> entry : map.entrySet()) {
			writer.addAttribute(entry.getKey().toString(), entry.getValue().toString());
		}
		writer.endNode();
	}

	public Object unmarshal(HierarchicalStreamReader arg0, UnmarshallingContext arg1) {
		return null; // não precisa
	}
}

daí vc só precisa registrar esse converter no xstream:

  • crie uma classe q estende XStreamJSONSerialization
  • sobrescreva o método getXStream
  • chame o super.getXStream(), salve numa variável, e chame o registerConverter(new MeuMapConverter()) nela
Criado 16 de junho de 2010
Ultima resposta 17 de jun. de 2010
Respostas 3
Participantes 2