Vraptor 3 + JSON

é daquele request q eu mandei o console do firebug

dá pra ter de deserialização, basta implementar Deserializer e anotar com Deserializes

@Deserializes({"application/json", "text/json"})
public class JSONDeserializer implements Deserializer {
    //...
}

o problema maior é que deserializar json é meio difícil de fazer genericamente, pois tem menos nomes.

deserializar xml é um pouco mais fácil

isso não adiantaria?


import br.com.abril.etiquetasinterface.models.EtiquetaTemplate;
import br.com.caelum.vraptor.deserialization.XStreamXMLDeserializer;
import br.com.caelum.vraptor.http.ParameterNameProvider;
import br.com.caelum.vraptor.ioc.Component;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

@Component
public class CustomJSONDeserialization extends XStreamXMLDeserializer {
    //delegate constructor
        
    public CustomJSONDeserialization(ParameterNameProvider provider) {
		super(provider);
		// TODO Auto-generated constructor stub
	}
    
	@Override
    protected XStream getXStream() {
		
		XStream xStream = new XStream(new JettisonMappedXmlDriver());
	
		xStream.alias("etiquetaTemplate", EtiquetaTemplate.class);

        return xStream;
    }
}

qual é o melhor maneira?

se ao invés de @Component vc usar @Deserializes(“application/json”) o VRaptor vai usar a classe…
mas tem que testar se isso vai deserializar do jeito que vc quer.

ROLLBACK hehe

Lucas acho q vou por aki:


import java.io.InputStream;

import br.com.caelum.vraptor.deserialization.Deserializer;
import br.com.caelum.vraptor.deserialization.Deserializes;
import br.com.caelum.vraptor.resource.ResourceMethod;

@Deserializes({"application/json", "json", "text/javascript"})  
public class CustomJSONDeserialization implements Deserializer {

	@Override
	public Object[] deserialize(InputStream inputStream, ResourceMethod method) {
		// COMO EU FAÇO A DESERIALIZAÇÃO AQUI???
		return null;
	}
}

como eu faço ali?

bom, o jeito mais fácil é usar form parameters :wink:

mas pra json, vc pode usar qqer biblioteca que parseia json. O XStream até faz isso, mas o deserializer é meio estranho… vc pode dar uma olhada no GSon tb…