2016-06-23 74 views
-1

我完全難住爲什麼發生這種情況,我得到的堆棧跟蹤對我沒有什麼幫助。我正在向Grails中的一個控制器發送post請求。處理請求的操作如下:嵌套每個關閉結果NoSuchMethodError

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 
+0

遍歷每個文件的名稱列表將嘗試將每個文件重命名爲列表中的每個名稱。我想也許你想重命名每個文件的名稱_at在json列表中相同的index_? – doelleri

+1

也請發佈完整的錯誤。 – doelleri

+0

@doelleri啊是的!那麼我會在文件列表中使用'eachWithIndex {}',並從具有相同索引的json中獲取我想要的名稱。我已經更新了問題以包含堆棧跟蹤。它在關閉開始的第一行發生錯誤。 –

回答

1

做一個Build -> Rebuild Project似乎已經解決了這一問題。

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

我認爲你的意思是'eachWithIndex',它可以獨立工作,但是當你在'json'中拋出時,會出現'NoSuchMethod'錯誤,這就是我被卡住的地方。 –

+0

你是對的。但問題是你試圖從** request.getFiles(「images」)**訪問** renameTo()**方法,這是不可能的。如果你想重命名文件 –