gpt4 book ai didi

grails - 持久化日期并使用 JSON 嵌套

转载 作者:行者123 更新时间:2023-12-02 15:55:28 25 4
gpt4 key购买 nike

我正在尝试保存嵌套的人,它是 json 数组并提示需要一个 Set。

我遇到的另一个问题是另一个字段日期不能为空,但已经包含值。

在将参数添加到我的对象之前我需要做什么,或者我必须更改我的 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"
], //...

最佳答案

首先,这条线是不必要的:

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
}]

这两种方法都很好,值得一试。

关于空 dateTime ,我会修改你的 JSON。我会发送 dateTime在单个字段中,而不是将值拆分为小时/分钟/天/等。默认格式为 yyyy-MM-dd HH:mm:ss.Syyyy-MM-dd'T'hh:mm:ss'Z' , 但这些可以由 grails.databinding.dateFormats 定义配置设置( config.groovy)。还有其他方法可以进行绑定(bind)( @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]定义了两次,并为您的内部集合(JSON 数组和索引键)使用 2 种语法。我个人会坚持使用单一语法来清理它:
"samples": [  
{"dateTime": "1988-01-01..."}
{"dateTime": "2015-10-21..."}
],"people": [
{"id": "1137"},
{"id": "1141"}
],

关于grails - 持久化日期并使用 JSON 嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34113881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com