Bom dia Lucas,
Estou com o mesmo problema, mas eu não posso migrar para a versão 3.5 agora devido a problemas com a função linkTo.
Seguindo as dicas eu registrei o pacote:
<context-param>
<param-name>br.com.caelum.vraptor.packages</param-name>
<param-value>
br.com.caelum.vraptor.converter.l10n,
br.com.caelum.vraptor.serialization.gson.adapters
</param-value>
</context-param>
E criei o JsonDeserializer para Calendar, mas ainda não funcionou.
Fazendo um teste com a classe Helper criada pelo Ribker funcionou, entretanto ficou um deserializer estático para um tipo.
@Deserializes("application/json")
public class Helper implements Deserializer {
@Override
public Object[] deserialize(InputStream arg0, ResourceMethod arg1) {
Gson gson = new GsonBuilder().create();
BufferedReader reader = new BufferedReader(new InputStreamReader(arg0));
Tarefa tarefa = gson.fromJson(reader, Tarefa.class);
return new Object[]{ tarefa };
}
}
Como eu posso resolver mantendo a versão 3.4.1?
a versão 3.5.1 corrige os problemas do linkTo, tenta fazer a migração =)
show!!!
dois coelhos com a mesma cajadada…
só mais uma pergunta Lucas:
Não é possível enviar dois objetos?
public void metodo(Objeto1 objeto1, Objeto2 objeto2) { ... }
Tentei e o segundo está vindo nulo.
é possível sim… só usar os nomes dos inputs a partir dos nomes dos parametros:
objeto1.propriedade1
objeto1.propriedade2
objeto2.propriedade1
objeto2.propriedade2
lembrando que é o nome do parametro que vale, não o nome da classe.
usando json do angularjs?
var json = angular.toJson({
obj1: {...},
obj2: {...}
});
o primeiro chega mas o segundo não
vc consegue ver quais parametros foram na requisição? tipo usando o firebug ou o developer tools?
estão indo os dois (vide anexo):
assinatura do metodo:
@Consumes("application/json")
@Put("/s/{tarefa.id}")
public void s(Tarefa tarefa, Processo processo)
o @Consumes de json e de xml padrão só suportam um objeto =(
tenta criar essa classe na sua aplicação:
@Component
public void MeuGSonDeserializer extends GsonDeserialization {
//delegate constructor
}
creio que isso deva resolver…
Não deu certo mas eu criei um wrapper.
Acha necessário criar uma issue ou é muito específico?
cria a issue sim, por favor…
mas só funcionaria com json, em xml isso já não faria sentido (já que tem que ter uma raíz única)
Lucas,
Fora a questão da deserialização de mais de um parâmetro, também estou tendo problemas com deserialização de subobjetos.
Quando uma propriedade é um outro objeto composto é deserializado nulo.
Ex.:
Meu objeto tarefa tem uma propriedade grupoAtendente, ela está chegando nula no controller, somente os tipos primitivos e seus wrappers estão chegando preenchidos.
O que fazer para tentar solucionar ou descobrir onde está o problema?
isso usando o gson ou o XStream?
o deserializer do vraptor não é recursivo?
o do XStream é, se eu não me engano… o do GSon eu não cheguei a testar esse caso.
Lucas,
Na verdade eu estava registrando o pacote errado.
Analisando as classes de deserialização vi que a classe do Gson está no pacote br.com.caelum.vraptor.deserialization.gson.
Registrei ele e passou a funcionar tudo, multiplos parâmetros e classes complexas.
Mas é necessário registrar o pacote de adapters também, então registrei estes dois:
br.com.caelum.vraptor.serialization.gson.adapters
br.com.caelum.vraptor.deserialization.gson