如何使用 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)
我必须使用 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)