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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19429137/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 17:04:40  来源:igfitidea点击:

Failed to convert property value of type 'java.lang.String' to required type 'com.mongodb.ServerAddress[]' for property 'replicaSetSeeds'

javaspringmongodbspring-mvc

提问by user2872219

Is this bug in Mongo driver or am i doing anything incorrect?

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

Getting below exception:

获得以下异常:

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

Below is my spring configuration

下面是我的弹簧配置

 <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/Drivers used:
spring-beans-3.2.0.RELEASE.jar mongo-java-driver-2.11.3.jar

使用的罐子/驱动程序:
spring-beans-3.2.0.RELEASE.jar mongo-java-driver-2.11.3.jar

Fixed it using below code:

使用以下代码修复它:

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

回答by jwineman

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.

ref 引用一个 spring bean,值转换为字符串。

回答by Yogesh Patil

by value,we mean that what we want inject is primitives or String,while with ref,what we want to inject is self-defined objects.

通过值,我们的意思是我们要注入的是原语或字符串,而对于 ref,我们要注入的是自定义对象。

if your are using primitives or String it is better to use

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

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

other-case use

其他情况使用

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