【问题标题】:org.springframework.beans.TypeMismatchException: Failed to convert value 'java.lang.String' to 'java.lang.Class' springorg.springframework.beans.TypeMismatchException:无法将值“java.lang.String”转换为“java.lang.Class”弹簧
【发布时间】:2016-11-22 17:46:30
【问题描述】:

我不知道为什么当我启动我的应用程序时 spring 会给我这个错误。我已经在包中定义了java类,并通过bean注入在xml文件中调用它。

这是 bean 注入

 <bean id="sessionFactory"
          class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value type="java.lang.Class">main.com.mpakhomov.chat.domain.User</value>
                <value type="java.lang.Class">main.com.mpakhomov.chat.domain.ChatMessage</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                <prop key="hibernate.connection.pool_size">${hibernate.connection.pool_size}</prop>
            </props>
        </property>
    </bean>

这是我尝试启动应用程序时遇到的错误的完整堆栈跟踪。

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Class'; nested exception is java.lang.IllegalArgumentException: Cannot find class [main.com.mpakhomov.chat.domain.User]
    at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:74)
    at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:39)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:187)  

假设类是在包中定义的,请问当我启动我的应用程序时会出现什么问题?

【问题讨论】:

  • 只是你的spring上的版本不符合你的hibernate版本。

标签: java spring hibernate spring-mvc tomcat


【解决方案1】:

我猜你在声明实体的包时是错误的:

如果你的包是 com.mpakhomov.*,你应该替换

<list>
    <value type="java.lang.Class">main.com.mpakhomov.chat.domain.User</value>
    <value type="java.lang.Class">main.com.mpakhomov.chat.domain.ChatMessage</value>
</list>

<list>
    <value type="java.lang.Class">com.mpakhomov.chat.domain.User</value>
    <value type="java.lang.Class">com.mpakhomov.chat.domain.ChatMessage</value>
</list>

【讨论】:

    【解决方案2】:

    我认为你不需要为 value 标签指定 type 属性。我的猜测是值标签需要一个字符串类型,而您正试图转换为java.lang.class,它会导致 IllegalArgumentException。所以这里的参数类型是错误的。您可以在以下行中看到错误。

    Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Class'; nested exception is java.lang.IllegalArgumentException
    

    尝试删除 type 属性,如下所示

    <list>
        <value>main.com.mpakhomov.chat.domain.User</value>
        <value>main.com.mpakhomov.chat.domain.ChatMessage</value>
    </list>
    

    还可以查看 Spring 文档 here。他们没有通过值标签传递任何类型属性。以下是他们在文档中使用的示例。

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
       <property name="annotatedClasses">
         <list>
           <value>test.package.Foo</value>
           <value>test.package.Bar</value>
         </list>
       </property>
     </bean>
    

    【讨论】:

      猜你喜欢
      • 2020-09-20
      • 2021-08-22
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多