Domanda

Sono molto nuovo per Grails e così spero di avere una domanda facile per voi.

Ho un domain model e all'interno di questo modello è un modello correlato (uno-a-molti). Diciamo Servizio e un servizio come 'n' compiti. Seleziono (via findAllBy ()) esempio 3 servizi e ogni servizio ha almeno un compito o tre per esempio.

Ora la mia domanda. I non voglio ritorno "rendere foundServices come JSON". Motivo: Non voglio lasciare che le persone di tutto il mondo conoscono il mio alcune proprietà forse "segreti", che sono tutti riempiti automaticamente dal ritorno database delle definizioni di modello e / selezionare. E 'questo un pensiero a destra, o è un "troppo e troppo in profondità sicurezza" -thought?

Così ho cercato di scoprire come posso tornare dati rilevanti di cui ho bisogno in un modo simile di questi oggetti.

ho provato:

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) È questo troppo "in alto"?

2) Pensi che la "materia ok doesn'n, restituire l'intero domain model (dal risultato di ricerca)"

3) Se metto le mie 'liste di array" insieme, come può essere fatto per essere simile a dominio modelli di accedere facilmente a tutte le proprietà e la 'n' task-list in ogni servizio

Grazie mille!

È stato utile?

Soluzione

Non è troppo in alto se le vostre esigenze di sicurezza impongono che alcune informazioni non essere condivisa. Nella maggior parte dei casi, non credo che sia un problema per appena convertire l'oggetto di dominio intero a JSON, ma la vostra applicazione potrebbe essere un caso speciale.

Si potrebbe scrivere il codice per fare questo in un modo più coerente con la pratica 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

Ho appena notato che il codice, inoltre, non ha fornito le chiavi per gli ID e nomi (utilizzando liste invece di mappe), che è probabilmente qualcosa che ci si vuole fare e che il codice di esempio che ho scritto lo fa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top