Retorno em consulta Rest
28/11/2014 20:11
0
Fala galera. Estou querendo construir um Fake de um serviço Rest em GRails que retorna o seguinte Layout (esses campos podem ser fixos):

{"entidadeVO": {"campo1": 191257.248, "campo2": 14.20, "campo3": 0.0}}

O que fiz:

- Criei uma Domain com o nome que quero retornar e os respectivos campos;

- Anotei a Domain com @Resources;

- No init do servletContext setei os campos na Domain.

Quando chamo a URL, meu retorno fica no formato:

{"class":"domain.EntidadeVO", "id":1, "campo1": 191257.248, "campo2": 14.20, "campo3": 0.0}

Ví que dá pra criar um Renderer, mas não consegui entender como ,e se dá pra, fazer o retorno no layout que pretendo.

Tem como fazer dando um retorno padrão a partir de um Controller? O que achei estranho é que não achei na doc como anotar um Controller pra ele conter o resource path. Isso é possível?

Como é um serviço já existente que eu não tenho o controle do Layout e já existe um app Java como cliente, lendo o retorno JSon nesse layout, queria que a App GRails, retornasse exatamente esse layout.

Alguém poderia iluminar o caminho do pequeno gafanhoto aqui?

Valeu galera ;)
Tags: rest renderer json


0
Galera, consegui usando o Marshaller... No Bootstrap init, adicionei o seguinte:

JSON.registerObjectMarshaller(EntidadeVO) {
def map= [:]
def mapRes= [:]

mapRes['campo1'] = it.campo1
mapRes['campo2'] = it.campo2

map['entidadeVO'] = mapRes

return map
}


Mas ainda gostaria que a entrada do serviço fosse no Controller... Realmente não entendi como fazer isso, nem pela doc. Me perdi. :(
28/11/2014 20:30


0
Olá Adriano,
Se com "ainda gostaria que a entrada do serviço fosse no controller", você quis dizer o que eu entendi, acho que extender RestfulController irá te ajudar.
Se não for isso, explique melhor o que deseja por favor.
02/12/2014 10:34


0
Adriano, tente isso:


def props = instancia.properties
props.remove('class')
props.remove('id')

render props as JSON


Dai manda renderizar o "props" ao invés do "instancia", sacou?


0
Fala Dyego. Faltou eu explicar melhor mesmo. O que eu quero é que o Controller retorne no Layout que eu especifiquei no primeiro Post. Não consegui visualizar como fazer meu Controller retornar um Layout fake no seguinte formato:

{"entidadeVO": {"campo1": 191257.248, "campo2": 14.20, "campo3": 0.0}}


Pra lhe ser BEM sincero, não consegui visualizar como fazer o Controller retornar a informação desatrelado do Domain.

Yoshi, como vão as coisas por essas bandas meu amigo? Quando vem visitar os conterrâneos pobres? :D

Entendi o conceito e até acho que sei como fazer, mas não imagino como colocar isso no Layout que pretendo, pois a minha Propriedade entidadeVo é quem contém os campos 1, 2 e 3 e eu preciso que eles apareçam exatamente assim.

Abs [] e valeu pelo retorno galera ;)
02/12/2014 16:13


0
Bom Adriano,
Se o que você quer é retornar um JSON com um formato específico, desatrelado de uma domain, pode usar o comando abaixo:

respond JSON.parse('{"chave":"valor","chave2":"valor2"}') ,[status: OK]

ou

HashMap<String, Object> result = new HashMap<String, Object>()
result.putAt('chvae', valor)
result.putAt('chave2', valor2)
respond result, [status: OK]

pode ser que você precise importar este cara: grails.converters.JSON
02/12/2014 17:39



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto