Question

Je suis très nouveau pour Grails et j'espère avoir une question facile pour vous.

J'ai un DomainModel et à l'intérieur de ce modèle est un modèle connexe (un à plusieurs). Disons que service et un service de tâches « n ». Je sélectionne (via findAllBy ()), par exemple 3 services et tous les services a au moins une tâche ou trois par exemple.

Maintenant, ma question. I ne veux pas retour "rendent foundServices JSON". Motif: Je ne veux pas laisser les gens partout dans le monde connaissent ma définition du modèle et des propriétés peut-être « secret », qui sont tous remplis automatiquement par le retour de la base de données / select. Est-ce une pensée droite, ou est-ce un « trop et sécurité trop profonde » -thought?

Alors j'ai essayé de savoir comment puis-je retourner données pertinentes dont j'ai besoin d'une manière similaire à ces objets.

J'ai essayé:

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) Est-ce trop "frais généraux"?

2) Pensez-vous que la "matière ok doesn'n, retournez l'ensemble DomainModel (du résultat de la recherche)"

3) Si je mets mes propres « listes de tableau » ensemble, comment cela peut-il être fait pour être similaire à domaine-modèles d'accéder facilement à toutes les propriétés et la « liste des tâches n » dans chaque service

Merci beaucoup!

Était-ce utile?

La solution

Il est pas trop frais généraux si vos exigences de sécurité exigent que certaines informations ne soient pas partagées. Dans la plupart des cas, je ne pense pas que ce soit un problème de simplement convertir tout l'objet de domaine à JSON, mais votre application peut-être un cas particulier.

Vous pourriez écrire le code pour le faire d'une manière plus conforme à la pratique 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

Je viens de remarquer que votre code n'a pas non plus fournir des clés pour les IDs et noms (en utilisant des listes au lieu de cartes), ce qui est probablement quelque chose que vous voulez faire et que le code exemple, j'ai écrit le fait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top