java-springDataMongo-MapKey

问题描述

在使用spring-data-mongodb-1.7.0.RELEASE.jar的时候,当我们存储的Map的key中含有“.”dot时,那么程序就会报错:

org.springframework.data.mapping.model.MappingException: Map key foo.bar.key contains dots but no replacement was configured! Make sure map keys don't contain dots in the first place or configure an appropriate replacement! at org.springframework.data.mongodb.core.convert.MappingMongoConverter.potentiallyEscapeMapKey(MappingMongoConverter.java:622) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeMapInternal(MappingMongoConverter.java:586) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.createMap(MappingMongoConverter.java:517) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:424) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:386) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:373) at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:257) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:373) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:451) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:386) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:373) at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:257) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:373) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:451) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:386) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:373) at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:257) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:373) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:345) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:310) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:77) at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:859) at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:806) at ?org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:794)

这个错误出现的原因是因为 源代码

Spring => "MappingMongoConverter.java"

/** 
* Potentially replaces dots in the given map key with the configured map key       
* replacement if configured or aborts * conversion if none is configured. 
* @see #setMapKeyDotReplacement(String) 
* @param source
* @return */ 
    protected String potentiallyEscapeMapKey(String source)
   { 
          if (!source.contains(".")) 
          { 
              return source; 
           } 

        if (mapKeyDotReplacement == null) 
        {
             throw new MappingException(String.format(
                "Map key %s contains dots but no replacement was configured! Make " + 
                " sure map keys don't contain dots in the first place or configure an appropriate replacement!", source))
          } 
          
      return source.replaceAll("\\.", mapKeyDotReplacement); 
     
    }

解决方法

<bean   id="mongoMoxydomainConverter"
    class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
   <constructor-arg index="0" ref="mongoDbFactory" />
   <constructor-arg index="1">
           <bean class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"/
   </constructor-arg>
  <property name="mapKeyDotReplacement" value="\\+"/>
</bean>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容