2015-04-02 48 views
1

我有一個Angular前端向我的服務器發送JSON更新,但Grails在控制器中看不到它。我剛剛升級到Grails 2.5。 我有我的EpisodeController控制器方法稱爲 '/ addGuest':request.JSON在Grails中爲空

def addGuest(Episode episode) { 
    println "J: "+ request.JSON; 
} 

,我把從角

service.addGuest = function(episode, guest) { 
     return $http.put(getUrlForId(episode.id)+"/addGuest", {guest: guest}); 
    } 

以下客人JSON看起來像

{guest: {name: "a", email: "a"}} 

我的路線是

"/episode/$id/addGuest"(method: 'PUT', controller: "episode", action: "addGuest", parseRequest: true) 

但是,當我從Angular或Rest Console chrome插件發送數據時,request.JSON始終爲空「[:]」。如果我將RestConsole中的Content-type從'application/json'更改爲'text/plain',則數據顯示!有數據通過json進入似乎是一個基本的東西,應該只是工作,所以我敢肯定,我已經搞砸了。任何幫助將不勝感激。謝謝。

+0

你有沒有json:['application/json','text/json'] MIME類型定義在你的config.groovy上? – dsharew 2015-04-02 15:35:02

+0

是的,我切換它們只是爲了看看是否有什麼會改變,但該行在那裏:「json:['text/json','application/json'],」 – MattGrommes 2015-04-02 15:39:34

+0

可能是你的休息客戶端的問題先進的休息客戶端(鉻擴展)使用應用程序/ JSON和它工作正常。 – dsharew 2015-04-02 15:46:06

回答

3

我有一個類似的問題,並回到我的大腦問題,我認爲一旦grails填充你的Episode對象,request.JSON被清空。緩衝區用完了。您可以將Episode作爲該方法的參數移除,並在發生任何其他處理之前查看request.JSON是否可用。

def addGuest() { 
    println "J: "+ request.JSON; 
} 

而且順便說一句,如果你需要通過JSON發送更多的數據比進入域名,使用命令對象,然後複製你需要將相應的域是什麼。這樣,你仍然可以讓grails完成其慣例。

+0

就是這樣!非常感謝,我想你已經救了我的理智。 :) – MattGrommes 2015-04-03 03:32:56

相關問題