【问题标题】:grails 3 overriding queryForResource not workinggrails 3覆盖queryForResource不起作用
【发布时间】:2015-08-25 04:51:02
【问题描述】:

根据Grails Web Services

我可以覆盖方法queryForResource。这样我就可以指定嵌套的 REST 资源。例如

"/authors"(resources:'author') {
    "/books"(resources:'book')
}

但是文档可能是错误的。因为它使用赋值运算符 = 而不是比较运算符 ==

运行这种方式我得到以下错误:

((id == id) && building.id) is a binary expression, but it should be a variable expression

将运算符从 = 更改为 == 我得到另一个错误

Cannot query property "params" - no such property on class clash.BuildingLevel exists

定义此嵌套 REST 资源的正确方法是什么?

这是我的 queryForResource 方法:

我都试过了:

@Override
protected BuildingLevel queryForResource(Serializable id) {
    if (params.buildingId) {
        return BuildingLevel.where {
            id == id && building.id = params.buildingId
        }.find()
    }
}


@Override
protected BuildingLevel queryForResource(Serializable id) {
    if (params.buildingId) {
        return BuildingLevel.where {
            id == id && building.id == params.buildingId
        }.find()
    }
}

【问题讨论】:

  • 你能发布你的 queryForResource 方法吗?
  • 嗨@SandeepPoonia。我发布了两种我尝试过但没有成功的方法

标签: rest grails resources nested url-mapping


【解决方案1】:

我只是想通了。

以下帖子issues-posting-nested-resource-in-grails对我有帮助。

params 不能在 where 子句 内。所以有必要创建一个局部变量来保持值。像这样:

@Override
protected BuildingLevel queryForResource(Serializable id) {
    def myLocalVariablebuildingId = params.buildingId
    if (params.buildingId) {
        return BuildingLevel.where {
            id == id && building.id == myLocalVariablebuildingId
        }.find()
    }
}

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2014-04-03
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多