我正在尝试使用多对一域关系在Grails中创建Restful API。
以下是我的两个域名:
Release.groovy
package releasemap_api
import java.util.Date;
import grails.rest.*
import org.grails.databinding.BindingFormat
@Resource(formats=['json', 'xml'])
class Release {
String branch
int build
String buildUrl
Date created = new Date()
static belongsTo = Component
static constraints = {
branch blank: false
build blank: false, min: 0
buildUrl url: true , unique: true
}
static mapping = {
created defaultValue: new Date()
}
}
Component.groovy
package releasemap_api
import grails.rest.*
@Resource(formats=['json', 'xml'])
class Component {
String name
static hasMany = [releases: Release]
static constraints = {
name unique: true , blank: false
}
}
因此,我们的想法是组件可以有多个版本。我使用以下URL Map来访问/管理组件及其版本。
"/components"(resources:"component") {
"/releases"(resources:"release")
}
现在我可以直接对组件和发布控制器执行常用的http动词(PUT,POST,DELETE,GET),但我希望通过其父组件来管理版本。
例如,我想对
执行POST./components/1/releases
创建新版本并将其添加到ID为1的组件。
到目前为止,我能够完成发布的GET请求,以便它可以直接并通过组件URL正常运行。
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
if(params.componentId !=null)
{
respond Component.where{
id==params.componentId.toLong()
}.find().releases, [formats:['json']]
}
respond Release.list(), [formats:['json']]
}
但我不确定如何配置write方法,以便将版本正确映射到其父组件。我正在使用GORM和MongoDB数据库。