【发布时间】: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 设为必需参数(即,我希望 myProperty2 和 myProperty3 成为可选请求参数)。但是,如果我提出这个要求:
http://myappserver:8080/app/hey/doSomething?myProperty1=foo
Grails 仍然会抱怨 myProperty2 和 myProperty3 具有 null 值。
那么,我做错了什么?谢谢!
【问题讨论】:
-
哪个版本的 Grails?如果是 2.4.*,那么您必须为 prop2 和 prop3 专门指定约束为
nullable: true,因为它们在命令对象(类似域类)中默认为 false。 -
@dmahapatro 有什么不同吗?我认为
nullable: true从那以后就一直存在......永远 -
@Dónal 是的。请参阅我更新的评论。此默认行为是最近添加的。
-
啊,是的……可以为空。 head desk,刚刚在文档中找到。我需要更多的咖啡:P。谢谢!
-
这与您的问题没有直接关系,而是与您的代码有关...操作方法不应声明为返回
JSON。您应该将所有控制器操作声明为返回Object的公共方法。通常的方法是使用def doSomething() { ... }之类的东西。 (剩下的太长了,一条评论放不下,第二条评论来了……)
标签: validation grails groovy