1

我对 Grails 很陌生,所以我希望我有一个简单的问题要问你。

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

现在我的问题。我不想返回“将 foundServices 渲染为 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)你认为“好的没关系,返回整个DomainModel(来自搜索结果)”

3)如果我将自己的“数组列表”放在一起,如何做到类似于域模型以轻松访问每个服务中的所有属性和“n”任务列表

非常感谢你!

4

1 回答 1

1

如果您的安全要求规定不共享某些信息,则开销不会太大。在大多数情况下,我不认为将整个域对象转换为 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 和名称的键(使用列表而不是映射),这可能是您想要做的事情,而我编写的示例代码就是这样做的。

于 2011-07-24T21:32:28.133 回答