我对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
最佳答案
如果您的安全需求要求不共享某些信息,则开销不会太大。在大多数情况下,我认为仅将整个域对象转换为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
https://stackoverflow.com/questions/6809070/