Es este un uso válido de Grails transitorios?
-
23-09-2019 - |
Pregunta
Tengo un dominio objeto sobre el que quiero guardar un par de cosas que solo existen en tiempo de ejecución.Me miré en el documentación y encontró el transients
palabra clave, la cual, en la cara de ella era lo que yo estaba buscando.Aquí es lo que mi objeto de dominio se parece a...
class Contact {
def Seeker
def beforeInsert()
{
initiatedDate = new Date()
}
Date initiatedDate
Date acceptedDate
static transients = ['pal']
Seeker pal
}
donde Seeker
es una maravillosa clase que no es un objeto de dominio, pero un marcador de posición para algunas propiedades.
Hasta el momento, todo está bien y mi Contacto con la tabla no tiene un pal
campo como se esperaba.En mi ContactController
Me consulta por un montón de contactos, c
, a continuación, buscar su Seeker
pals (los detalles de cómo retener) y establecer el pal
campo de un nuevo objeto.
c.pal = new Seeker();
c.pal.name = otherObject.name
render c as JSON
Todo esto parece que funciona bien, excepto que el pal objeto de falta en el JSON devuelto.
Es este un uso válido de transitorios?El docs mencionar que son útiles para la función de base de getters y setters, pero en mi caso quiero un objeto real.Debería estar escribiendo un getPal() y setPal() método en mi objeto?
Gracias
Solución
Los transitorios son en realidad utilizados para detener los campos en el dominio de los objetos se conservan.(Si desea realizar algunas init en el pal campo sin tener que ponerlo en el controlador podría utilizar el evento onLoad() o escribir un getPal() método que podría reemplazar el valor predeterminado de la propiedad de captador).Usted está también a la derecha tenga en cuenta que el valor predeterminado JSON contador de referencias sólo hace persistió campos.
Cuando la representación mis objetos de dominio he encontrado que es útil para crear un objeto JSON marshallers de modo que las propiedades no deseadas no son prestados, pero también a resolver su problema transitorio demasiado.Usted puede hacer esto usando el JSON.registerObjectMarshaller método:
import grails.converters.JSON
...
class BootStrap {
def init = {servletContext ->
JSON.registerObjectMarshaller(Contact ) {
def returnArray = [:]
returnArray['id'] = it.id
returnArray['initiatedDate'] = it.initiatedDate
returnArray['acceptedDate'] = it.acceptedDate
returnArray['pal'] = it.pal
return returnArray
}
JSON.registerObjectMarshaller(Seeker) {
...
}
Si se agrega el marshallers en su arranque.groovy que estará disponible en los controladores.
HTH
(También encontrado esto: http://old.nabble.com/Taggable-plugin-and-JSON-converter-ts24830987.html#a24832970)