You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails 6.0.0为何将字符串URL参数search强转为SavedSearch领域对象?

问题:Grails 6.0.0中控制器参数名引发类型转换异常

我有一个控制器方法,接收名为search的String类型参数:

def test(String search) {
   log.info("search: ${search}")
   render("testing ${search}")
} 

该方法在Grails 3.3.9中运行正常,但在6.0.0版本中,当URL包含?search=mystring时会抛出异常:

Cannot cast object 'mystring' with class 'java.lang.String' to class 'com.whatever.project.SavedSearch'

项目中存在名为SavedSearch的领域对象,Grails似乎会自动尝试将名为search的参数转换为该类型对象。只要将参数名改为searchString这类其他名称,方法就能正常运行。

触发问题的前提条件

同一控制器中必须存在引用SavedSearch对象的方法,如下所示:

def something() {
    Long searchId = params.id as Long
    // *必须存在下面这行代码才会触发问题*
    SavedSearch search = SavedSearch.read(searchId)
    render("placeholder")
}

复现步骤

  • 克隆用于复现问题的最小化Grails 6项目
  • 切换到revised分支:git checkout revised
  • 清理项目:grails clean
  • 启动应用:grails run-app
  • 在浏览器中访问localhost:8080,点击首页显示的链接,即可看到上述类型转换异常

内容的提问来源于stack exchange,提问作者Dan L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:35:14