Grails将命令对象添加到版本会导致params的id和版本不被绑定

Con*_*wer 3 grails command-objects

如果我错过了一些非常明显的东西,我很抱歉,但是我一直在用这个问题解决问题.

我有一个命令对象:

class MyCommand {
    Long id
    String value
}
Run Code Online (Sandbox Code Playgroud)

我在我的控制器中绑定到这个:

public update(MyCommand myCmd) {


}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,一切都很好.现在我正在尝试添加版本字段,该字段在请求参数中传递给命令对象:

class MyCommand {
    Long id
    Long version
    String value
}
Run Code Online (Sandbox Code Playgroud)

现在,当绑定发生时,id和version始终为null,即使它们存在于params对象中.

我怀疑对于与grails如何处理乐观锁定相关的id/version属性可能有一些特殊处理(因为这最终是我这样做的原因)但是问题出现在命令对象中,与任何域对象无关.

我很困惑,为什么这不起作用.在命令对象上存在版本时是否存在某些特殊情况?

Ali*_*dad 8

似乎这是根据Jeff Brown jira设计的

数据绑定显式避免绑定id或版本[if]它们都存在并按设计完成.这是针对与域类相关的数据绑定相关的潜在安全问题的屏障.对命令对象进行简单的解决方法是使用类似"idValue"和"versionValue"或"id"和"version"以外的任何名称来命名属性.