【问题标题】:How can I specify optional request parameters for a Grails command object?如何为 Grails 命令对象指定可选请求参数?
【发布时间】:2014-10-24 16:14:14
【问题描述】:

更新: 代码已更改,使其看起来像 Groovier XD

正如标题所说。假设我有一个命令对象:

@Validateable
class MyCommand {
    String myProperty1
    String myProperty2
    String myProperty3
    static constraints = {
        myProperty1(blank: false)
    }
}

我还有一个控制器,它会在收到GET 请求时尝试填充我的命令对象的新实例:

class HeyController {
    def doSomething(MyCommand mc) {
        render [result: mc] as JSON
    }
}

请注意,我只想在此示例中将 myProperty1 设为必需参数(即,我希望 myProperty2myProperty3 成为可选请求参数)。但是,如果我提出这个要求:

http://myappserver:8080/app/hey/doSomething?myProperty1=foo

Grails 仍然会抱怨 myProperty2myProperty3 具有 null 值。

那么,我做错了什么?谢谢!

【问题讨论】:

  • 哪个版本的 Grails?如果是 2.4.*,那么您必须为 prop2 和 prop3 专门指定约束为 nullable: true,因为它们在命令对象(类似域类)中默认为 false。
  • @dmahapatro 有什么不同吗?我认为nullable: true 从那以后就一直存在......永远
  • @Dónal 是的。请参阅我更新的评论。此默认行为是最近添加的。
  • 啊,是的……可以为空。 head desk,刚刚在文档中找到。我需要更多的咖啡:P。谢谢!
  • 这与您的问题没有直接关系,而是与您的代码有关...操作方法不应声明为返回JSON。您应该将所有控制器操作声明为返回 Object 的公共方法。通常的方法是使用def doSomething() { ... } 之类的东西。 (剩下的太长了,一条评论放不下,第二条评论来了……)

标签: validation grails groovy


【解决方案1】:
@Validateable
class MyCommandObject {
    String myProperty1
    String myProperty2
    String myProperty3


    static constraints = {

        myProperty2 nullable: true
        myProperty3 nullable: true
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多