Grails oauthService和linkedin的帮助

Grails oauthService和linkedin的帮助,grails,grails-controller,Grails,Grails Controller,我试图在grails控制器中迭代参数列表。当我有一个列表时,长度超过一个元素,如下所示: [D4L2DYJlSw, 8OXQWKDDvX] 以下代码可以正常工作: def recipientId = params.email recipientId.each { test-> System.print(test + "\n") } 输出为: A4L2DYJlSw 8OXQWKDDvX 但是,如果列表只有一项,则输出不是唯一的项,而是列表中的每个字母。例

我试图在grails控制器中迭代参数列表。当我有一个列表时,长度超过一个元素,如下所示:

     [D4L2DYJlSw, 8OXQWKDDvX]
以下代码可以正常工作:

def recipientId = params.email
recipientId.each { test->
     System.print(test + "\n")  
}
输出为:

  A4L2DYJlSw
  8OXQWKDDvX
但是,如果列表只有一项,则输出不是唯一的项,而是列表中的每个字母。例如,如果我的参数列表为:

 A4L2DYJlSwD
使用与上述相同的代码,输出变为:

 A
 4
 L
 2
 D
 Y
 J
 l
 S
 w
谁能告诉我发生了什么事,我做错了什么

谢谢

jason

我的猜测是(从我在groovy的其他地方看到的情况来看),它正在试图找出
recipientId
的类型应该是什么,因为您没有给它一个(因此它是动态的)

在第一个示例中,groovy决定传递给
的内容。每个{}
闭包都是一个
列表。第二个例子,由于只有一个
字符串
,groovy决定类型应该是
字符串
。每个{}
也知道如何迭代
字符串
——它只是将其转换为
字符[]


在这种情况下,您可以简单地将
recipientId
设置为
列表。

我刚才遇到了同样的问题!我的解决方案是

def gameId = params.gameId
def selectedGameList = gameId.class.isArray() ? Game.getAll(gameId as List) : Game.get(gameId);
因为在我的例子中,我得到了一个或多个游戏ID作为参数

您可以做的是相同的:

def recipientId = params.email
if(recipientId.class.isArray()){
 // smtg
}else{
  // smtg
}

因为这里发生的事情是,只要您调用“.each”groovy,就会在列表中转换该对象!groovy中的“String AS LIST”表示该字符串的字符数组

您也可以这样尝试:

def recipientId = params.email instanceof List ? params.email : [params.email]
recipientId.each { test-> System.print(test + "\n") }

它将处理这两种情况。

Grails提供了一种内置方式来保证特定参数是一个列表,即使只有一个参数被提交。当项目数量可能为0、1或更多时,这实际上是获取项目列表的首选方法:

def recipientId = params.list("email")
recipientId.each { test->
     System.print(test + "\n")  
}

params
对象将单个项目包装为列表,如果有多个项目,则返回列表。

感谢您的回复。我试着按照你的建议添加列表。尽管如此,对于大于1的列表,它仍然可以正常工作,但如果列表只有一个值,我会遇到以下错误:无法将类为“java.lang.String”的对象“8OXQWKDDvX”强制转换为类“java.util.list”。对不起,我不记得我是怎么解决这个问题的。亚瑟的回答似乎是可行的,如果不是完全地道的话。谢谢,你的建议奏效了。我不确定这是否是解决问题的最佳方法,但它是有效的