2017-09-12 2 views
0

Je suis incapable d'interroger un GeoSpatial Query de within dans les données de ressort mongodb, si j'écris une requête personnalisée ou une requête d'interface de données de ressort J'obtiens cette erreur et la même question fonctionne très bien de client MongoDB (de robomongo):Aucun convertisseur trouvé capable de convertir GeoCommand à DBObject

est la requête Après:

distanceRepository.findDistanceBySrcWithin(srcCircle); 

Ci-dessous la configuration mongo:

@Override 
public MongoClient mongo() throws Exception { 
List<MongoCredential> mongoCredentials = new ArrayList<>(); 
mongoCredentials.add(MongoCredential.createCredential(userName, "admin", password.toCharArray())); 
return new MongoClient(new ServerAddress(host, port), mongoCredentials); 
} 

@Override 
@Bean 
public MongoTemplate mongoTemplate() throws Exception { 
MultiTenantMongoDbFactory mongoDbFactory = (MultiTenantMongoDbFactory) mongoDbFactory(); 

MongoTypeMapper typeMapper = new DefaultMongoTypeMapper(null); 
MappingMongoConverter converter = new MappingMongoConverter(mongoDbFactory(), new MongoMappingContext()); 
converter.setTypeMapper(typeMapper); 

MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter); 
mongoDbFactory.setMongoTemplate(mongoTemplate); 
return mongoTemplate; 
} 

@Override 
@Bean 
public MongoDbFactory mongoDbFactory() throws Exception { 
return new MultiTenantMongoDbFactory(mongo(), dbName); 
} 

Ce qui suit est la trace de la pile:

2017-09-12 15:51:00 ERROR [JobDurationServiceImpl]:250 - Error in method getDistance Reason: No converter found capable of converting from type [org.springframework.data.mongodb.core.query.GeoCommand] to type [com.mongodb.DBObject] 
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.mongodb.core.query.GeoCommand] to type [com.mongodb.DBObject] 
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:313) 
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:195) 
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:176) 
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.convertToMongoType(MappingMongoConverter.java:979) 
at org.springframework.data.mongodb.core.convert.QueryMapper.delegateConvertToMongoType(QueryMapper.java:393) 
at org.springframework.data.mongodb.core.convert.QueryMapper.convertSimpleOrDBObject(QueryMapper.java:381) 
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedValue(QueryMapper.java:327) 
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedKeyword(QueryMapper.java:277) 
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObjectForField(QueryMapper.java:215) 
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:130) 
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1760) 
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1750) 
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:624) 
at org.springframework.data.mongodb.repository.query.MongoQueryExecution$CollectionExecution.execute(MongoQueryExecution.java:70) 
at org.springframework.data.mongodb.repository.query.MongoQueryExecution$ResultProcessingExecution.execute(MongoQueryExecution.java:345) 
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:91) 
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:482) 
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) 
at com.sun.proxy.$Proxy76.findDistanceBySrcWithin(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 

Répondre

3

La clé est d'ajouter la ligne suivante:

converter.afterPropertiesSet(); 

après

MappingMongoConverter converter = new MappingMongoConverter(mongoDbFactory(), 
new MongoMappingContext()); 
converter.setTypeMapper(typeMapper); 

tout en créant MongoTemplate