JSON形式で結果を返すRESTサービスを作成しようとしています。
検索結果を返すメソッドを作成しました。検索パラメータのEnumMapを受け入れ、これらをチェックしてcreateCriteriaを構築します。
私が抱えている問題はvalidFor
、aが有効な期間に適用されるがtradingName
、現在の日付/時刻が「有効な」期間にあるかどうかに関係なく返されるということです。
names
返されたJSONの例では、他の2つvalidFor
が範囲外であるため、最初のJSONのみを戻す必要がstart
あります。end
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の経験不足が、私を挫折させています。あなたが私に与えることができるどんな助けでも大いに感謝されるでしょう。