当我使用generate-all package.DomainObject时,它会生成一个控制器,其中create action生成为:
def create(){
respond new DomainObject(params)
}
当我调用localhost:8080 / DomainObject / create时,即使不进行任何代码更改,它也会引发异常:
groovy.lang.MissingPropertyException:没有这样的属性:controller for class:package.DomainObject
对于params map具有且DomainObject没有的属性,内省看起来很失败。这是令人惊讶的,因为在grails 2中,内省过去只是忽略了不匹配的属性,它也用于对字段进行必要的类型转换(现在如果DomainObject有一个int属性,它将抛出一个类型不匹配的异常因为params map将其作为String传递。
这真的很不方便。有什么改变或我遗失了什么?
答案 0 :(得分:0)
使用地图构造函数并使用Grails中的地图批量设置属性基本上与Groovy相同,但它有逻辑排除'controller','action'和'format'键以保持这样的控制器代码整洁。那突破了3.x和has been reported in the issue tracker。它没有标记为已修复,但在一个简单的3.0.4测试应用程序中正常工作。
作为临时解决方法,您可以复制params地图并删除存储在这些键下的值,并使用构造函数的“固定”映射:
def create() {
def fixedParams = ([:] + params) // copy
['controller', 'format', 'action'].each { fixedParams.remove it }
respond new Thing(fixedParams)
}