嵌套每个闭包导致NoSuchMethodError

时间:2016-06-23 18:53:14

标签: grails groovy

我完全不知道为什么会发生这种情况,我得到的堆栈跟踪对我来说并没有多大帮助。我正在向Grails中的一个控制器发送post请求。处理请求的操作如下:

def save() {
    def files = request.getFiles("images")
    def json = JSON.parse(request.getParameter("json"))

    // Redacted
}

单独循环imagesjson分别正常工作:

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
        }
    }

然而,这里的区别在于categoriesimages都被定义为控制器的实例变量:

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

2 个答案:

答案 0 :(得分:1)

执行Build -> Rebuild Project似乎解决了这个问题。

答案 1 :(得分:0)

files.each {file,index->
   File img = new File( json[index])
   file.transferTo(img)    
}