json - Grails模型和子模型的JSON响应(一对多)

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

我有一个DomainModel,并且在此模型内部是一个相关的模型(一对多)。假设服务和服务为“n”个任务。
我选择(通过findAllBy())例如3个服务,每个服务至少具有一个或三个任务。

现在我的问题。我不想想要返回“render foundServices as JSON”。原因:我不想让世界各地的人们知道我的模型定义以及某些“ secret ”属性,这些属性全部由数据库返回/选择自动填充。这是正确的想法,还是“太多而又太深的安全性”思想?

因此,我试图找出与这些对象类似的方法如何返回所需的相关数据。

我试过了:

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”任务列表

非常感谢你!

最佳答案

如果您的安全需求要求不共享某些信息,则开销不会太大。在大多数情况下,我认为仅将整个域对象转换为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和名称的键(使用列表而不是 map ),这可能是您想要执行的操作,而我编写的示例代码则提供了该功能。

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

相关文章:

javascript - 使用Node.js从客户端向服务器发送json请求

javascript - Grails和Javascript

grails - 带有枚举的Grails JSON单元格

spring - Grails 2.0 注入(inject) bean 并在 Controller

grails - 在Grails中删除对象的问题-缓慢,但仍未真正删除

grails - Grails:当我重新编译文件时(使用数据源时)服务器崩溃

grails - Grails中的URL映射问题:参数不正确

grails - Grails版本差异

hibernate - Grails域创建关联表

grails - 如果URL不包含额外路径,如何显示身份验证页面?