request.JSON 在 Grails 中为空

request.JSON empty in Grails

我有一个 Angular 前端向我的服务器发送 JSON 更新,但 Grails 不会在控制器中看到它。我刚刚升级到 Grails 2.5。 我的 EpisodeController 上有一个名为“/addGuest”的控制器方法:

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

我将从 Angular

发送以下内容
    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 中的内容类型从 'application/json' 更改为 'text/plain',数据就会显示出来!通过 json 接收数据似乎是一件基本的事情,应该可以正常工作,所以我确定我搞砸了。任何帮助将不胜感激。谢谢。

前一段时间我遇到了类似的问题并且绞尽脑汁想这个问题,我认为一旦 grails 填充了您的 Episode 对象,request.JSON 就会被清空。缓冲区已用完。您可以删除 Episode 作为该方法的参数,并在任何其他处理发生之前查看 request.JSON 是否可用。

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

顺便说一句,如果您需要通过 JSON 发送比进入域的数据更多的数据,请使用命令对象,然后将您需要的数据复制到适当的域。这样,您仍然可以让 grails 执行其约定的事情。