Pregunta

Soy muy nuevo en Grails, así que espero tener una pregunta fácil para ti.

Tengo un Modelo de dominio y dentro de este modelo es un modelo relacionado (uno a muchos). Digamos el servicio y un servicio como tareas 'n'. Selecciono (a través de FindallBy ()) EG 3 Servicios y cada servicio tiene al menos una tarea o tres, por ejemplo.

Ahora mi pregunta. yo no quiere devolver "Render FoundServices como JSON". Razón: no quiero que las personas de todo el mundo conozcan la definición de mi modelo y algunas tal vez las propiedades "secretas", que se llenan automáticamente por la base de datos return/select. ¿Es eso un pensamiento correcto, o es una "seguridad demasiado profunda" -SHugs?

Así que intenté averiguar cómo puedo devolver los datos relevantes que necesito de manera similar que estos objetos.

Lo intenté:

List<Service> servicesSelection = Service.findAllByCompany("someCompany")
ArrayList services = new ArrayList();
for (Service service: servicesSelection) {
   ArrayList myService = new ArrayList()
   myService .add(service.id)
   myService .add(service.getServiceName())
   for (Tasks task: service.tasks) {
      ArrayList serviceTasks = new ArrayList()
      serviceTasks.add(task.id)
      serviceTasks.add(task.getTaskName())
      myService.add(serviceTasks)
   }
   services.add(myService)
}
render services as JSON

1) ¿Es esto demasiado "por encima"?

2) ¿Crees que "ok no importa, devuelva todo el módelo de dominio (del resultado de la búsqueda)"

3) Si reúno mis propias 'listas de matriz ", ¿cómo se puede hacer esto para ser similar a los modelos de dominio para acceder fácilmente a todas las propiedades y la lista de tareas' n 'en cada servicio?

¡Muchos gracias!

¿Fue útil?

Solución

No es demasiado gastos generales si sus requisitos de seguridad dictan que no se comparta cierta información. En la mayoría de los casos, no creo que sea un problema simplemente convertir todo el objeto de dominio a JSON, pero su aplicación podría ser un caso especial.

Puede escribir el código para hacer esto de una manera más consistente con la práctica de Groovy/Grails:

def services = []
for (s in Service.findAllByCompany("someCompany")) {
   def tasks = []
   for (t in s.tasks) {
      tasks << [id: t.id, taskName: t.taskName]
   }
   def service = [id: s.id, serviceName: s.serviceName, tasks: tasks]
   services << service
}
render services as JSON

Acabo de notar que su código tampoco proporcionó claves para las ID y los nombres (usando listas en lugar de mapas), que probablemente es algo que desea hacer y cuyo código de ejemplo que he escrito hace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top