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
相关产品推荐
相关产品推荐

