我对Grails非常陌生,所以我希望我有一个简单的问题。

我有一个域模型,此模型是一个相关的模型(一对多)。假设服务和服务作为“ n”任务。我选择(通过findallby()),例如3服务,每个服务至少有一个任务或三个任务。

现在我的问题。我 想要返回“ Render undservices作为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

我只是注意到您的代码也没有为ID和名称提供键(使用列表而不是地图),这可能是您要做的事情以及我编写的示例代码所做的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top