gpt4 book ai didi

json - createCriteria()

转载 作者:行者123 更新时间:2023-12-02 15:33:56 24 4
gpt4 key购买 nike

我正在尝试创建一个REST服务,该服务以JSON格式返回结果。

我创建了一个将返回搜索结果的方法。它接受一个EnumMap搜索参数,并检查这些参数以建立createCriteria。

我遇到的问题是,无论当前日期/时间是否在“有效期”内,适用于validFor的期间的tradingName都会被返回。

在返回的JSON示例中,它仅应带回names中的第一个,因为其他两个validFor不在startend范围内

findCentre方法

def findCentre(EnumMap searchParams) {

def c = Centre.createCriteria()
def results = c.listDistinct {
if(searchParams.containsKey(CENTRE_SEARCH_PARAMETERS.START_CENTRE_CODE_RANGE) && searchParams.containsKey(CENTRE_SEARCH_PARAMETERS.END_CENTRE_CODE_RANGE)) {
between("code", searchParams.get(CENTRE_SEARCH_PARAMETERS.START_CENTRE_CODE_RANGE), searchParams.get(CENTRE_SEARCH_PARAMETERS.END_CENTRE_CODE_RANGE))
}

if(searchParams.containsKey(CENTRE_SEARCH_PARAMETERS.CENTRE_CODE_PARTIAL)) {
like("code", "%" + searchParams.get(CENTRE_SEARCH_PARAMETERS.CENTRE_CODE_PARTIAL) + "%")
}

if(searchParams.containsKey(CENTRE_SEARCH_PARAMETERS.INDIVIDUAL_CENTRE_CODE)) {
eq("code", searchParams.get(CENTRE_SEARCH_PARAMETERS.INDIVIDUAL_CENTRE_CODE))
}

if(searchParams.containsKey(CENTRE_SEARCH_PARAMETERS.CENTRE_NAME_PARTIAL)) {
names {
ilike("tradingName", "%" + searchParams.get(CENTRE_SEARCH_PARAMETERS.CENTRE_NAME_PARTIAL) + "%")
validFor {
and {
le("start", new Date())
ge("end", new Date())
}
}
}
}
}
results
}

我得到的JSON响应如下所示
[
{
"code": "1",
"names": [
{
"trading_name": "ABC",
"valid_time": {
"start": "2013-02-13T08:54:31Z",
"end": "2018-02-12T08:54:31Z"
}
},
{
"trading_name": "ABCDEF",
"valid_time": {
"start": "2013-03-31T23:00:00Z",
"end": "2013-12-31T00:00:00Z"
}
},
{
"trading_name": "DEF",
"valid_time": {
"start": "2013-03-31T23:00:00Z",
"end": "2013-12-31T00:00:00Z"
}
}
],
"email": "blah@blah.com"
}
]

我认为问题出在 findCentre方法中,但是我目前缺乏Grails经验导致我遭受挫折。您能给我的任何帮助将不胜感激。

最佳答案

返回的结果是完整的Centre对象-您将搜索限制为当前名称与模式匹配的对象,然后返回不考虑日期的所有匹配对象的名称。

最简单的方法可能是对标准结果进行后过滤,而不是直接将其返回

Date now = new Date()
return results.collect { res ->
[code: res.code,
names: res.names.findAll { it.start <= now && it.end >= now }*.tradingName,
email: res.email ]
}

应该给你像JSON
[
{"code":"1",
"names":["ABC"],
"email": "blah@blah.com"
}
]

关于json - createCriteria(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14851324/

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