我试图保存嵌套的人,这是json数组并抱怨需要一个Set。
我遇到的另一个问题是,另一个字段日期不能为空,但已包含值。
在将params添加到我的对象之前我需要做什么或者我必须更改我的json?我试图像这样保存json帖子:
// relationship of Test
//static hasMany = [people: Person, samples: Sample]
def jsonParams= JSON.parse(request.JSON.toString())
def testInstance= new Test(jsonParams)
//Error requiring a Set
[Failed to convert property value of type 'org.codehaus.groovy.grails.web.json.JSONArray' to required type 'java.util.Set' for property 'people'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.Person] for property 'people[0]': no matching editors or conversion strategy found]]
//error saying its null
Field error in object 'com.Test' on field 'samples[2].dateTime': rejected value [null]; codes [com.Sample]
//...
"samples[0].dateTime_hour":"0",
"samples[0].dateTime_minute":"0",
"samples[0].dateTime_day":"1",
"samples[0].dateTime_month":"0",
"samples[0].dateTime_year":"-1899",
"samples[0]":{
"dateTime_minute":"0",
"dateTime_day":"1",
"dateTime_year":"-1899",
"dateTime_hour":"0",
"dateTime_month":"0"
},
"people":[
"1137",
"1141"
], //...
答案 0 :(得分:0)
首先,这条线是不必要的:
def jsonParams= JSON.parse(request.JSON.toString())
request.JSON
可以直接传递给Test
构造函数:
def testInstance = new Test(request.JSON)
<小时/> 我不确定你的
Person
课程是什么样的,但我假设这些数字(1137,1141)是ids。如果是这种情况,那么你的json应该可以工作 - 直接传递request.JSON
可能会有所帮助。我在本地测试了您的JSON,并且没有关联hasMany
集合的问题。我也用过:
// JSON numbers rather than strings
"people": [1137, 1141]
// using Person map with the id
"people: [{
"id": 1137
}, {
"id": 1141
}]
这两种方法都很有效,值得一试。
<小时/> 关于nulldateTime
,我会重写你的JSON。我会将dateTime
发送到一个字段中,而不是将值拆分为小时/分钟/天/等。默认格式为yyyy-MM-dd HH:mm:ss.S
和yyyy-MM-dd'T'hh:mm:ss'Z'
,但这些格式可由grails.databinding.dateFormats
配置设置(config.groovy
)定义。还有其他方法可以进行绑定(@BindingFormat
注释)但最简单的方法就是以grails无需额外配置即可处理的方式发送日期。
如果您将dateTime
拆分成碎片,那么您可以使用@BindUsing
注释:
class Sample{
@BindUsing({obj, source ->
def hour = source['dateTime_hour']
def minute = source['dateTime_minute']
...
// set obj.dateTime based on these pieces
})
Date dateTime
}
<小时/> 对JSON进行额外评论,您似乎已将
samples[0]
定义了两次,并且正在为内部集合使用2种语法(JSON数组和索引键)。我个人会坚持用一种语法来清理它:
"samples": [
{"dateTime": "1988-01-01..."}
{"dateTime": "2015-10-21..."}
],"people": [
{"id": "1137"},
{"id": "1141"}
],