迭代可能是String或String Array的Groovy对象

Joh*_*nie 3 grails groovy

使用Grails和场景是如果我有一个从HTTP请求传入的对象,我遍历该对象并获取所有可能的对象,如:

if (params.colors) {
  for (String color in params.colors) {
    println color
  }
}
Run Code Online (Sandbox Code Playgroud)

如果传入[Ljava.lang.String(即params.colors = ["blue","green","yellow"]),那么您的输出是预期的:

blue
green
yellow
Run Code Online (Sandbox Code Playgroud)

但是如果params.colors ="blue",那么当然,groovy将标记为"蓝色",你将得到输出:

b
l
u
e
Run Code Online (Sandbox Code Playgroud)

我想我应该检查它是否已经是一个数组.除非我接近这个错误或者有一种常规的做法.

epi*_*ian 9

您可以使用对象list上的方法将颜色参数作为列表访问params:

for (String color in params.list('colors')) {
  println color
}
Run Code Online (Sandbox Code Playgroud)

这样,如果你的动作被调用就好/your_action?colors=red或者/your_action?colors=red&colors=green甚至没有颜色参数都没关系(这就是为什么我遗漏了if),params.list('colors')总会返回一个列表:)