ConversionNotSupportedException 具有类似名称的类



更新:对类等做出了一些错误的假设。现在,当我有一个"演示"项目时,会发生以下情况:

我有两个班级,都叫"公司"。

  • 一个被放置在grails-app/domain/my.classes.domain.Company
  • 另一个在src/groovy/my.clazz.Company中。

最后一个有一个@Validateable注释,Config.groovy 包含 grails.validateable.packages = ['my.clazz']

我还有一个帐户类,在grails-app/domain/my.classes.domain.Account中:

package my.classes.domain

import java.io.Serializable;

class Account implements Serializable { Company company }

然后我使用以下代码(在bootstrap.groovy中):

import my.classes.domain.Company
import my.classes.domain.Account
...
Company company = new Company
Account acccount = new Account(company: company)

运行此应用时,将显示以下错误:

原因:org.springframework.beans.ConversionNotSupported异常:无法将属性"company"的类型 [my.clazz.Company] 的值转换为所需的类型 [my.classes.domain.Company]:找不到匹配的编辑器或转换策略    ...33 更多原因:java.lang.IllegalStateException:无法将属性"company"的类型 [my.clazz.Company] 的值转换为所需的类型 [my.classes.domain.Company]:找不到匹配的编辑器或转换策略

这是一个非常奇怪的例外,因为一切似乎都很好。一些测试证明了以下"提示":当我修改 config.groovy 以显式命名类时,不会发生此错误(即使用 grails.validateable.classes = ['my.classes.domain.Company']),当我修改帐户的公司属性以不同的方式命名(并相应地修改引导程序)时,不会发生此错误,即:

class Account extends Serializable {
    Company cmp
}

但是,这些是解决方法。我真的很想知道为什么会发生这种情况。有人知道吗?

为了安全起见,我做了以下操作来制造此问题:

  1. 创建域类:my.classes.domain.Company
  2. 创建域类:my.classes.domain.account
  3. 修改域类,如上
  4. 创建一个时髦的类:my.clazz.Company
  5. 给这个时髦的类一个可验证的注释。
  6. 将 My.clazz 包添加到可验证的包
  7. 在引导程序中,使用新帐户创建一个新帐户(公司:公司)

除了代码中的各种拼写错误使问题难以确定之外,问题似乎是您正在尝试将 my.class.Company 类型的 Account.company 属性设置为 my.class.domain.Company 类型。 您的引导程序需要更改为:

import my.class.Company
import my.class.Account
Company company = new Company
Account acccount = new Account(company: company)

请注意,正确的公司导入声明。

根据你描述的错误,我认为Grails判断错了:你转移到账户中的公司被确定为my.clazz.Company,而不是my.classes.domain.Company。

您可以进行简单的检查以确定引导程序中company的类型:

import java.lang.Class;
...
println company.getClass().getName()

相关内容

  • 没有找到相关文章

最新更新