Grails oauthService和linkedin的帮助
我试图在grails控制器中迭代参数列表。当我有一个列表时,长度超过一个元素,如下所示: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 但是,如果列表只有一项,则输出不是唯一的项,而是列表中的每个字母。例
[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”。对不起,我不记得我是怎么解决这个问题的。亚瑟的回答似乎是可行的,如果不是完全地道的话。谢谢,你的建议奏效了。我不确定这是否是解决问题的最佳方法,但它是有效的