GStringImpl 不能转换为 java.lang.String

Posted

技术标签:

【中文标题】GStringImpl 不能转换为 java.lang.String【英文标题】:GStringImpl cannot be cast to java.lang.String 【发布时间】:2015-05-18 17:30:35 【问题描述】:

我在使用 Grails 和 Spring Security 时遇到了以下错误。有没有其他人遇到过这样的问题?如果是这样,您的解决方法是什么?

Error |
Exception in thread "Thread-15" 
Error |
java.lang.ClassCastException: org.codehaus.groovy.runtime.GStringImpl cannot be cast to java.lang.String
Error |
    at org.codehaus.groovy.grails.project.compiler.GrailsProjectWatcher.run(GrailsProjectWatcher.java:114)

还有

java.lang.IllegalArgumentException: Failed to evaluate expression 'User_name'

【问题讨论】:

grepUser_name 的代码并向我们展示它周围的代码 "$my_var".toString 对我有用,谢谢 Cyber​​Aleks 【参考方案1】:

您是否生成了所有类(用户、角色...)。 你的命令看起来如何? 喜欢这个grails s2-quickstart com.testapp User Role? 检查您的配置并像本教程中一样尝试。 Spring Security Plugin Tutorials

实际上,这个错误意味着在 groovy 中您使用了像“$my_var”这样的 GString,而某些类需要 String。它不能自动施放。如果你有这样的代码,你必须把它转换成这样的字符串:"$my_var".toString()

【讨论】:

特别是,如果您尝试将 GString 分配给静态类型为 String 的内容(或为 String 类型的方法参数传递 GString),那么 Groovy 将为您进行转换,但如果您分配给键入为 Object 的东西,然后您必须自己转换它。 同意。我认为问题可能是像 def myvar = "$some value" 这样的代码,它将被委托给 spring 安全框架中的一些 java 类。 这个答案对我有用,但就我而言,它的用途是在build.gradle 文件中。

以上是关于GStringImpl 不能转换为 java.lang.String的主要内容,如果未能解决你的问题,请参考以下文章

线程的状态和生命周期

传入mybatis的xml为Long型时报There is no getter for property named 'accountId' in 'class java.la

Java基本问题

Swift 3 转换获取 'Int1' 不能转换为 'Bool'

VB.NET 'Char' 值不能转换为 'Integer'

整数除法('Int' 不能转换为 'Double')