Grails - RESTful Web服务在定义控制器时响应404

时间:2014-06-05 19:45:17

标签: rest grails

我定义了一个具有一些属性的域模型类,并使用@Resource在Web服务的官方Grails指南之后将其标记为RESTful资源。现在,在测试应用程序时(使用Ruby的RestClient),我可以看到事情正常。但是,在定义了一个覆盖save方法的关联控制器(用于创建新资源)之后,即使只是简单的GET请求,我也得到了404。我使用BootStrap定义了一些测试对象,因此GET应该正常工作。

我的控制器代码如下所示:

class ModelController {

    @Transactional
    def save(Model model) {
        def status = 201
        if (model.validate()) {
            model.save(flush: true, failOnError: true)
        } else {
            status = 422
        }
        render status:status
    }

}

我是否还需要对UrlMappings.groovy执行某些操作,或者我的控制器代码是否有问题(我的所有单元测试都通过了)?

更新

我创建了一个示例项目来演示正在发生的事情。请检查我的bookstore-demo repository on GitHub。在存储库中,我定义了2个标记rest-workingrest-not-working。第一个标志着事情仍然有效的地方,第二个标志着,正如其名称所暗示的那样,标志着我创建了一个导致404响应的控制器。这几乎是我到目前为止对我的实际项目所做的,而且我也遇到了同样的错误。

1 个答案:

答案 0 :(得分:0)

代码看起来没问题,如果你得到的是404,那么听起来它甚至没有打到这个控制器。我会打开开发人员控制台并尝试捕获它正在发送的URL - 发送的URL可能不正确。如果我正在进行实验,我倾向于在我的逻辑之间放置println“1”println“2”等等,以查看代码的去向或者它完全返回它意味着它甚至没有到达那里。所以,如果你怀疑你的代码,可以在你的if语句之间尝试这种策略,看看哪些数字被击中。

此外,没有太多可以继续尝试提供任何更有用的反馈,但如果有任何定义,我还会查看此Controller的allowedMethods ......

如果你有......,不确定它是如何发布的。

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

尝试将其更改为

static allowedMethods = [update: "POST", delete: "POST"]

不确定是否仍然支持:

static allowedMethods = [save:['POST','GET'],update: "POST", delete: "POST"]

对于所有方法,请参阅:

http://grails.org/doc/latest/ref/Controllers/allowedMethods.html