具有多对一域映射的Grails Rest API

时间:2014-09-29 16:49:10

标签: rest grails groovy

我正在尝试使用多对一域关系在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数据库。

0 个答案:

没有答案