我使用集成测试和 Grails 脚手架将数据写入 mongoDB 数据库时遇到问题。当尝试从“列表”类型页面中选择域实例时,我收到错误“未找到 id null 的[域名]”。
我确信这是因为 Grails url [controller]/[action]/[id]。该 id 是一个字符串,需要转换为 ObjectId 以供 Grails 查询使用。
有没有办法做到这一点,以便它影响指定的域,甚至更好的是,同时影响所有域?
我想当我编写我的应用程序时,我可以从操作方法中将其转换为 ObjectId,但我希望脚手架能够工作或提供全局解决方案。
我相信发生这种情况是因为 show() 方法(Grails 脚手架功能作为操作生成)接受 Long 类型的 id 参数,即。
def show(Long id) {
def suiteInstance = Suite.get(id)
if (!suiteInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'suite.label', default: 'MyDomainClass'), id])
redirect(action: "list")
return
}
[suiteInstance: suiteInstance]
}
它将 id 参数绑定到参数。由于 ObjectId 无法转换为 Long,因此它最终为 null,因此对 MyDomainClass.get(id) 的调用失败并显示错误消息。
您可以通过覆盖脚手架控制器中的 show() 操作来解决此问题,以便它需要一个 ObjectId 或 String,但我认为正确的解决方法是更新 Grails 脚手架插件,以便它在它接受的 ID 类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)