如何使用 List<Double> 填充 Grails 域 class

How to populate a Grails domain class with a List<Double>

我必须使用 Grails 4 创建一个应用程序。目前,没有数据库,它都在内存中。

我想要的只是一个模块可以包含代表成绩的双打列表。

域名classModule.groovy:

package myapp

import grails.rest.Resource

@Resource(uri='/module', formats = ['json', 'xml'])
class Module {
    String title
    String description
    int semesterID
    List<Double> grades;
    double finalGrade


    static constraints = {
        title blank:false
        description blank:false
        semesterID blank:false
    }
}

为了开发应用程序,我想使用填充对象。所以我在 BootStrap.groovy:

中初始化了一些
class BootStrap {

    def init = { servletContext ->
        //Create default Modules
        new Module(title: "WebeC", description: "Web Engineering", semesterID: 1).save()
        new Module(title: "WebeC", description: "Web Engineering", semesterID: 2).save()
        new Module(title: "ism", description: "Information Security Management", semesterID: 2).save()
    }
    def destroy = {
    }
}

到目前为止一切顺利,但我在尝试填充成绩时失败了。 我已经尝试过的事情:(全部在 BootStrap.groovy)

//test 1
 new Module(title: "WebeC", description: "Web Engineering", semesterID: 1, grades: [4.0, 5.5, 3]).save()

//test 2
new Module(title: "WebeC", description: "Web Engineering", semesterID: 1, grades: {[4, 5, 6]}).save()

// test 3
 def List<Double> temp = [4.0, 5.5, 3]
 new Module(title: "WebeC", description: "Web Engineering", semesterID: 1, grades: temp).save()

输出始终相同:

[{"id":1,"title":"WebeC","semesterID":1,"grades":[],"description":"Web Engineering","finalGrade":0.0}, ...]

这只是一个语法问题还是我整个方法都错了? 非常感谢

您必须在您的域中添加 hasMany 静态 属性:

static hasMany = [grades: Double]

然后您应该能够使用以下内容填充成绩:

new Module(title: "WebeC", description: "Web Engineering", semesterID: 1, grades: [4.0, 5.5, 3]).save()

BootStrap 中,您必须在交易中保存域:

Module.withTransaction { status ->
     Module module = new Module(name: "name1", grades: [4.0, 5.5, 3])
     module.save(flush: true)
}

Andriy Budzinski 的回答是正确的。要使用 REST Api,视图下缺少另一个文件:


model{
    Module module
}

json g.render(module, [expand: ['grades'], resolveTemplate: false])

我也稍微改了一下BootStrap.groovy

  new Module(title: "WebeC", description: "Web Engineering", semesterID: 1, grades: [4.0, 5.5, 3] ).save(flush: true)