Grails json Реакция моделей и подмоделей (один ко многим)

StackOverflow https://stackoverflow.com/questions/6809070

Вопрос

Я очень новичок в Grails, и я надеюсь, что у меня будет легкий вопрос для вас.

У меня есть Domainmodel, и внутри этой модели есть связанная модель (один-один). Допустим, сервис и сервис в качестве задач. Я выбираю (через findallby ()), например, 3 службы, и, например, у каждой службы есть хотя бы одна задача или три.

Теперь мой вопрос. я не Хочу вернуть "рендеринг -заседание как JSON". Причина: я не хочу, чтобы люди во всем мире знали определение моей модели и некоторые, возможно, «секретные» свойства, которые все заполняются автоматически возвратом/выбором базы данных. Это правильная мысль, или это «слишком много и слишком глубокая безопасность»-размышления?

Поэтому я попытался выяснить, как я могу вернуть соответствующие данные, которые мне нужны в аналогичном образом, чем эти объекты.

Я старался:

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) Это слишком много "накладных расходов"?

2) Как вы думаете, «ОК, не имеет значения, верните всю доменмодель (из результатов поиска)»

3) Если я собираю свои собственные «списки массивов» вместе, как это можно сделать, чтобы быть похожим на доменные модели, чтобы легко получить доступ к всем свойствам и списку «N» в каждой службе

Большое спасибо!

Это было полезно?

Решение

Это не слишком много накладных расходов, если ваши требования безопасности определяют, что определенная информация не будет передана. В большинстве случаев я не думаю, что это проблема просто преобразовать весь объект домена в JSON, но ваше приложение может быть особым случаем.

Вы можете написать код, чтобы сделать это таким образом, более соответствующего практике 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

Я только что заметил, что ваш код также не предоставил ключи для идентификаторов и имен (используя списки вместо карт), что, вероятно, вы хотели бы сделать, и что делает пример, который я написал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top