org.springframework.beans.TypeMismatchException:无法将值'java.lang.String'转换为'java.lang.Class'spring

时间:2016-07-19 17:43:23

标签: java spring hibernate spring-mvc tomcat

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

这是豆子注射

 <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)  

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

2 个答案:

答案 0 :(得分:0)

我猜你宣布实体包时错了:

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

send_at

<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>

答案 1 :(得分:0)

我认为您无需为value标记指定type属性。我的猜测是,value标签期望一个String类型,并且您正在尝试转换为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。它们没有使用value标记传递任何类型属性。以下是他们在文档中使用的示例。

<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>