Problemas na serializacao de heranca VRaptor 3.4.1
8 respostas
renatoargh
Bom dia, eu sei que nas versões anteriores haviam alguns bugs em relacao a serializacao de herança e com os .includes(), ai baixei o VRaptor 3.4.1 e parei de ter uma excecao mas em compensacao o resultado ainda nao e como o esperado. Vejam so:
{"id":1,"excluido":false,"dataDeCriacao":{"time":1335536220000,"timezone":"America/Sao_Paulo"},"tipo":"juridica","telefones":[false,-1,"br.ind.prv.dominio.Contato.telefones",false],"nome":"Pedreira Rio Verde LTDA","dataDeNascimento":{"time":1335536220000,"timezone":"America/Sao_Paulo"},"registroNacional":"00132781000178","inscricaoMunicipal":"103010068"}
O problema esta no campo “telefones” que nao traz os telefones e sim dados do objeto ArrayList… Alguem tem alguma ideia???
Eu estava suspeitando que na hora da serializacao o hibernate ainda nao tinha buscado a colecao de telefones no banco e que dessa forma o vraptor estava serializando um objeto de proxy do hibernate, mas ai eu fiz um contato.getTelefones(); antes da serializacao e nao mudou nada…
renatoargh
Engraçado é que serializando direto usando o XStream + Jettison eu consigo perceber que de fato tem um objeto do Hibernate ai no meio e que em uma de sua propriedades tem sim a lista…
Agora, ele da uma excecao na linha comentada porque “inscricaoMunicipal” so tem em um dos filhos, nao na classe pai. Existe uma maneira de contornar isto? A intencao desta busca e retornar apenas o id do objeto, e desta maneira, quando for PessoaJuridica vai retornar tambem a inscricao municipal, que e desnecessaria neste contexto. O que acha???
Lucas_Cavalcanti
vc quer retornar só os ids?
o mais fácil pra garantir isso, é serializar uma lista só com os ids:
Obrigado Lucas, como sou novo no java ainda nao conhecia esse macete!!! Cara, se nao for abusar, e puder fazer mais uma pergunta… existe uma maneira de sobrescrever a seralizacao de um tipo especifico no VRaptor??? Por exemplo… quando eu serializo um calendar ele fica assim:
porém eu gostaria de ter a data por extenso mesmo:
"dataDeNascimento": "21/04/1987 00:00:00"
Algo como:
@Component@CustomSerializerpublicclassCalendarCustomSerializationextendsCustomSerialization<Calendar>{publicStringserialize(Calendarcalendar){return"data do jeito que eu quero";}}
Obrigado novamente Lucas! Estamos reimplementando o sistema da empresa em java e escolhi o VRaptor para isso, ate agora so estou me impressionando com todas as funcionalidades e rapidez no desenvolvimento!!! abracao
Lucas_Cavalcanti
só criar um converter do XStream pra data, e anotá-la com @Component: