Frage

Ich bin sehr neu in Grails und ich hoffe, ich habe eine einfache Frage an Sie.

Ich habe ein Domainmodel und in diesem Modell befindet sich ein verwandtes Modell (Eins-zu-Many). Sagen wir Service und einen Dienst als 'n' Aufgaben. Ich wähle (über findAllby ()) zB 3 -Dienste aus und jeder Dienst hat zum Beispiel mindestens eine oder drei Aufgaben.

Nun meine Frage. ich nicht WOLLEN SIE RETORING "Render FoundServices als JSON". Grund: Ich möchte die Menschen auf der ganzen Welt nicht über meine Modelldefinition und einige "geheime" Eigenschaften informieren, die alle automatisch von der Datenbank zurückgegeben/ausgewählt werden. Ist das ein richtiger Gedanke oder ist es eine "zu viel und zu tiefe Sicherheit"-Gedanken?

Also habe ich versucht herauszufinden, wie ich relevante Daten zurückgeben kann, die ich auf ähnliche Weise benötige als diese Objekte.

Ich habe es versucht:

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) Ist das zu viel "Überkopf"?

2) Glaubst du "OK macht keine Sache, gib das gesamte Domainmodel zurück (aus Suchergebnis)"

3) Wenn ich meine eigenen "Array-Listen" zusammenstelle

Vielen Dank!

War es hilfreich?

Lösung

Es ist nicht zu viel Gemeinkosten, wenn Ihre Sicherheitsanforderungen vorschreiben, dass bestimmte Informationen nicht weitergegeben werden. In den meisten Fällen denke ich nicht, dass es ein Problem ist, das gesamte Domain -Objekt in JSON zu konvertieren, aber Ihre App könnte ein Sonderfall sein.

Sie können den Code auf eine Weise schreiben, die mit der Groovy/Grails -Praxis übereinstimmt:

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

Mir ist gerade aufgefallen, dass Ihr Code auch keine Schlüssel für die IDs und Namen bereitstellte (mit Listen anstelle von Karten), was wahrscheinlich etwas ist, das Sie tun möchten und welcher Beispielcode, den ich geschrieben habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top