无法将类型'java.lang.String'的属性值转换为属性'replicaSetSeeds'的必需类型'com.mongodb.ServerAddress []'

时间:2013-10-17 14:13:47

标签: java spring mongodb spring-mvc

这是Mongo驱动程序中的错误还是我做错了什么?

低于例外:

Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'com.mongodb.ServerAddress[]' for property 'replicaSetSeeds'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.mongodb.ServerAddress] for property 'replicaSetSeeds[0]': no matching editors or conversion strategy found
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:465)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:496)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:490)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1437)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1396)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1132)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522)
    ... 14 more
Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.mongodb.ServerAddress] for property 'replicaSetSeeds[0]': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:264)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:128)
    at org.springframework.beans.TypeConverterDelegate.convertToTypedArray(TypeConverterDelegate.java:487)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:195)
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:450)
    ... 20 more

以下是我的弹簧配置

     

 <bean id="defaultMongoTypeMapper"  class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
    <constructor-arg name="typeKey"><null/></constructor-arg>
 </bean>

 <bean id="mappingMongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <constructor-arg name="mappingContext" ref="mappingContext" />
    <property name="typeMapper" ref="defaultMongoTypeMapper" />
 </bean>

 <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />   
    <property name="writeConcern">
        <util:constant static-field="com.mongodb.WriteConcern.SAFE" ></util:constant>
    </property>
 </bean>

jars /使用的驱动程序:
弹簧豆,3.2.0.RELEASE.jar 蒙戈-java的驾驶员2.11.3.jar

使用以下代码修复它:

<bean id="mongoClient" class="com.mongodb.MongoClient">
    <constructor-arg>
        <list>
            <value>161.141.16.100:27017</value>
            <value>161.141.16.101:27017</value>
        </list>
    </constructor-arg>
</bean>

<mongo:db-factory id="mongoDbFactory" dbname="test" mongo-ref="mongoClient"/>

2 个答案:

答案 0 :(得分:2)

You're probably using

<property name="[variable]" ref="[bean]"/>

instead of

<property name="[variable]" value="[bean]"/>

ref references a spring bean, value translates to string.

答案 1 :(得分:0)

按值表示我们要注入的是基元或String,而使用ref时,我们要注入的是自定义对象。

如果您使用的是原语或字符串,则最好使用

<property name="Variable value" ref="BeanName" />

其他用途

<property name="Variable value" value="BeanName" />