Grails JSON的响应模型和子模型(一对数)
-
25-10-2019 - |
题
我对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和名称提供键(使用列表而不是地图),这可能是您要做的事情以及我编写的示例代码所做的。
不隶属于 StackOverflow