我完全不知道为什么会发生这种情况,我得到的堆栈跟踪对我来说并没有多大帮助。我正在向Grails中的一个控制器发送post
请求。处理请求的操作如下:
def save() {
def files = request.getFiles("images")
def json = JSON.parse(request.getParameter("json"))
// Redacted
}
单独循环images
和json
分别正常工作:
files.each {
println it
}
json.each {
println it
}
但是嵌套它们不会:
files.each { img ->
json.each { jsn ->
println "$img: $jsn"
}
}
我要做的是用户上传X张图片和json有效负载。 json将包含上传文件的新名称,因此我将遍历每个文件并将其重命名为json中指定的名称。所以我试图实现这样的东西(假设相同的文件和json大小相同):
files.each { image ->
json.names.each { newName ->
image.renameTo(new File(destination, "$newName.jpg"))
}
}
奇怪的是,它不像我index
行动那样有效我正在做同样的事情:
categories.each { category ->
images.each { image ->
// Redacted
}
}
然而,这里的区别在于categories
和images
都被定义为控制器的实例变量:
private categories = []
private images = []
堆栈追踪:
URI: /api/images/save
Class: java.lang.NoSuchMethodError
Message: null
Caused by: gabriel.ApiController$_save_closure6: method <init (Ljava/lang/Object;Ljava/lang/Object;)V not found
Line | Method
->> 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 617 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run . . . in java.lang.Thread
Caused by NoSuchMethodError: gabriel.ApiController$_save_closure6: method <init>(Ljava/lang/Object;Ljava/lang/Object;)V not found
->> 91 | save in ApiController.groovy
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 1142 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 617 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
答案 0 :(得分:1)
执行Build -> Rebuild Project
似乎解决了这个问题。
答案 1 :(得分:0)
files.each {file,index->
File img = new File( json[index])
file.transferTo(img)
}