因此,我们从公司的grails开始,创建这个使用ExtJS作为前端和Grails作为后端的应用程序。
由于ExtJS专门使用JSON填充数据表等,因此我们面临的挑战是创建这些接口,以restful方式向ExtJS发送和接收JSON对象。
在仔细考虑了我们的域模型之后,我们选择了一个。很快,我们意识到系统中的一些表将由来自多个域对象的信息组成。
经过一番搜索,我们找到了JSON RESTful API for GORM插件,它基本上公开了任何给定域对象的RESTful接口。
这就引出了问题的要点。
在我看来,有两种方法可以继续下去。
1)为ExtJS中的每个数据表创建一个特定的控制器,该控制器将具有不同的操作,并且在每个操作中它将创建或接收JSon对象,以在数据表使用的不同域对象上执行CRUD。
在我看来,这会更耗时。不管怎样,这是一种选择。
2)另一种选择是通过创建一个特定于我们想要填充的datatable的“复合”域对象(此对象中的每个属性都是datatable中的一列)来实现上述插件。在此之后,只需使用用于GORM插件的JSON RESTful API公开它,该插件基本上会为我们处理整个CRUD操作。
有没有一种方法可以在我们的域模型中创建一个像我们想要的对象,而不需要在后端实际创建更多的数据库表?
我相信我们走在正确的道路上,我们只需要专家的一点指导:)
提前感谢!
发布于 2011-04-11 23:41:59
有意思的。
我最终使用了一种不同的方法,让我知道你的想法。
基本上,我们最终确实使用了这个插件:http://grails.org/plugin/json-rest-api来公开域类,并处理所有的CRUD操作。
我们所做的是为每个类创建一个自定义的JSON编组程序,如下所示。
Bootstrap.groovy
[...]
JSON.registerObjectMarshaller(Person){
def returnArray = [:]
returnArray['id'] = it.id
returnArray['name'] = it.name
returnArray['street'] = it.address.street
return returnArray
}Person.groovy
//the plugin exposes the class with this
static expose = ['person']
String name
Address address
[...] 当调用"as JSON“方法时,封送处理程序实际上会根据类的转换方式进行操作。
现在,由于有了这个插件,我们可以
GET http://mydomain.com/api/person,我们得到了一个json对象,它包含来自person和其他类的信息,如下所示:
{"data":{"id":"1", "name":"Peter", "Spooner St"}} 唯一的问题是,如果可能的话,我们现在必须弄清楚如何通过更新或创建来更新街道地址。
有什么想法?
发布于 2011-04-10 03:10:52
在您的例子中,我建议您创建一组Command对象和控制器来处理它们。这将优雅地考虑到你的“复合”方法。
Command object是一个类,它拥有域对象所具有的所有很酷的验证和数据绑定功能,但没有直接的持久性。
要查看的链接:
Command Objects
JSON Responses
https://stackoverflow.com/questions/5599628
复制相似问题