Grails对id字段的搜索引发错误

Grails对id字段的搜索引发错误,grails,casting,Grails,Casting,我有一个搜索页面,用户应该能够根据他们的id GORM生成的id搜索作者,而不是我的域类中的属性或他们的名称。 当我搜索作者姓名时,搜索页面工作正常,但当尝试搜索他们的id时,我得到下面的错误 信息: java.lang.String cannot be cast to java.lang.Long 请告诉我如何解决这个问题 以下是我在控制器中的搜索方法: def search(Integer max) { params.max = Math.min(max ?: 10, 100)

我有一个搜索页面,用户应该能够根据他们的id GORM生成的id搜索作者,而不是我的域类中的属性或他们的名称。 当我搜索作者姓名时,搜索页面工作正常,但当尝试搜索他们的id时,我得到下面的错误

信息:

java.lang.String cannot be cast to java.lang.Long
请告诉我如何解决这个问题

以下是我在控制器中的搜索方法:

def search(Integer max) {
    params.max = Math.min(max ?: 10, 100)

    def authorList = Author.createCriteria().listDistinct () {
        if ( params.id ) {
            eq("id", "%${params.id}%")
        }
        if ( params.name ) {
            ilike("name", "%${params.name}%")
        }


    respond authorList, model:[authorInstanceCount: Author.count()]
}

您得到的例外信息非常丰富。您试图在需要java.lang.Long的地方传递java.lang.String。传递params.id而不将其转换为字符串:

eq("id", params.id) // if params.id is java.lang.Long
// or
eq("id", params.id.toLong()) // if params.id is java.lang.String

在listDistinct方法关闭后,您还错过了关闭花括号,这可能是复制粘贴过程中的错误。

您得到的异常信息非常丰富。您试图在需要java.lang.Long的地方传递java.lang.String。传递params.id而不将其转换为字符串:

eq("id", params.id) // if params.id is java.lang.Long
// or
eq("id", params.id.toLong()) // if params.id is java.lang.String
在关闭listDistinct方法后,您还错过了关闭花括号,这可能是复制粘贴过程中的错误。

替换此选项:

eq("id", "%${params.id}%")

params.long'id'尝试将参数安全地转换为long,即如果无法执行转换,它将返回null,而不是引发异常。

替换此:

eq("id", "%${params.id}%")

long'id'尝试将参数安全地转换为long,即,如果无法执行转换,它将返回null,而不是引发异常