결과를 JSON 형식으로 반환하는 REST 서비스를 만들려고합니다.createCriteria()
검색 결과를 반환하는 메소드를 만들었습니다. 검색 매개 변수의 EnumMap을 받아들이고이를 확인하여 createCriteria를 빌드합니다.
난 데 문제는 tradingName
은 유효 기간에 적용되는 validFor
에 관계없이 현재 날짜/시간이 기간 여부 "에 대한 유효"에 있는지 여부의 반환됩니다 있다는 것입니다. 그것은 단지 다른 두 validFor
같이 names
의 제 다시 가져와야 반환 JSON의 예에서는
는
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 경험이 부족하여 좌절의 원인이되고있다. 네가 나에게 줄 수있는 어떤 도움이라도 대단히 감사 할 것이다. 당신이 돌아
감사 이안처럼 당신에게 JSON을 제공해야하는 직접
을 돌아보다 기준 결과 오히려 포스트 필터 될 가능성이 높습니다. 그 일은 훌륭했습니다. 나는 그것이'Centre' 객체 전체를 반환한다는 것을 알았지 만,'validFor {and {le ("start", new Date()) ge ("end", new Date()}} createCriteria()의 올바른 결과가 필터링되었습니다. 이것 좀 더 설명해 주시겠습니까? 죄송합니다. Grails는 완전히 새로운 것입니다. –
@GarethLewis 기준 쿼리의 조건은 데이터베이스에서 선택된 개체를 제한하는 방법 일 뿐이지 만 선택한 각 개체는 SQL 용어로 전체적으로 반환되지만 WHERE 절이지만 SELECT 처리 대상에는 영향을 미치지 않습니다. 당신은'projections' 블록을 사용하여 SELECT를 정의 할 수 있습니다.하지만 여러분은 프로젝션에 필요한 것을 할 수 없었습니다. 그래서 나는 포스트 필터링을 제안했습니다. –
다시 한 번 감사드립니다. 나는 네가하는 말을 얻는다. 정보만을위한 '전망'을 조사 할 것입니다. –