0
我试图创建一个REST服务,以JSON格式返回结果。createCriteria()
我创建了一个将返回搜索结果的方法。它接受搜索参数的EnumMap,并检查这些参数以构建createCriteria。
我遇到的问题是,它适用于该期间tradingName
有效期为validFor
,获取,不管当前日期/时间是否在期限与否的“有效”返回。
在JSON的示例中返回,它应该只带回第一names
的,其他两个validFor
脱落
findCentre方法的start
和end
范围
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": "[email protected]"
}
]
我认为问题出在findCentre
方法中,但我目前缺乏Grails经验会导致我受挫。任何帮助,你可以给我将非常感激。
感谢伊恩。这很好。我知道它返回整个'Centre'对象,但我会认为'validFor {和{le(“start”,new Date())ge(“end”,new Date())}}'part createCriteria()会过滤正确的结果。请你能解释一下这一点吗?对不起,对Grails来说全新的。 – 2013-02-14 08:06:21
@GarethLewis在条件查询的条件仅是限制的方式,其对象从数据库中选择,但每个选定的对象返回全部 - 在SQL方面他们是WHERE子句,但不影响什么选择。你可以使用'projection'块来定义SELECT,但是我不能想出一个方法来做你需要的投影,这就是我提出后期过滤的原因。 – 2013-02-14 09:10:04
再次感谢。我明白你在说什么。将仅查看“预测”信息。 – 2013-02-14 09:46:17