Как проверить, существует ли параметр в params? - PullRequest
7 голосов
/ 10 июня 2011
for ( boldParam in [para1, para2, para2, para4, para5] ) {
    if(/* boldParam exists in params */)
        ilike(boldParam,'%' + params.boldParam + '%')
    }
}

Я хотел бы написать что-то вроде выше. Я пытаюсь избежать следующих нескольких операторов if:

if (params.para1)
     ilike('para1','%' + params.para1+ '%')
if (params.para2)
     ilike('para2','%' +params.para2+ '%')
if (params.para3)
     ilike('para3','%' + params.para3+ '%')

Ответы [ 3 ]

17 голосов
/ 10 июня 2011

params - это Map, поэтому вы можете использовать containsKey():

for (boldParam in [para1, para2, para2, para4, para5]) {
   if (params.containsKey(boldParam)) {
      ilike(boldParam, '%' + params.boldParam + '%')
   }
}
6 голосов
/ 13 мая 2013

Попытка получить несуществующее свойство даст вам null.Это означает, что вы можете просто сделать

if (!params.missing) {
   println("missing parameter is not present within request.")
}

. В другом случае вы также можете попробовать оператор безопасного разыменования ?..Например:

params.email?.encodeAsHTML()
0 голосов
/ 01 июня 2015

Используемая мной альтернатива:

['param1','param2','param3','param4','param5'] /* and it also could come from a service */
.each {
    if (params["${it}"]) filters["${it}"] = params["${it}"] 
} /* Do it in your controller and then send $filters to your service */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...