You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.5.2下MongoDB Map键含点号报错且替换配置不生效问题

配置失效原因与解决方案

失效原因

Spring Boot 2.3.x及更高版本对MongoDB的自动配置逻辑做了调整,直接自定义MappingMongoConverter Bean的方式已经无法覆盖默认配置:默认初始化的MongoTemplate不会优先使用你手动创建的MappingMongoConverter实例,且手动new的转换器没有加载Spring Boot默认配置的类型转换、映射规则等内容,最终导致你的点号替换配置不生效。

解决方案

方案一(优先推荐):使用MongoCustomizer修改配置

Spring Boot 2.3+ 新增了MongoCustomizer扩展点,专门用于调整自动配置好的MappingMongoConverter属性,不会覆盖原有默认配置,仅修改你需要自定义的规则,代码如下:

import org.springframework.boot.autoconfigure.mongo.MongoCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MongoConfiguration {

    @Bean
    public MongoCustomizer mapKeyDotReplacementCustomizer() {
        return mappingMongoConverter -> mappingMongoConverter.setMapKeyDotReplacement("-DOT");
    }
}

该方案不需要修改其他Mongo相关配置,添加后直接生效。

方案二:手动定义MongoTemplate绑定自定义转换器

如果你需要完全自定义MappingMongoConverter的所有规则,可以在自定义转换器的同时,手动声明MongoTemplate Bean绑定你的转换器:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;

@Configuration
public class MongoConfiguration {

    @Bean
    public MappingMongoConverter mongoConverter(MongoDatabaseFactory mongoFactory, MongoMappingContext mongoMappingContext) {
        DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoFactory);
        MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
        mongoConverter.setMapKeyDotReplacement("-DOT");
        // 若有其他自定义转换规则也可在此处添加
        return mongoConverter;
    }

    @Bean
    public MongoTemplate mongoTemplate(MongoDatabaseFactory mongoDatabaseFactory, MappingMongoConverter mongoConverter) {
        return new MongoTemplate(mongoDatabaseFactory, mongoConverter);
    }
}

注意:该方案需要你自行补全所有原本Spring Boot自动配置的Mongo转换规则,否则可能出现原有类型转换失效的问题。

内容的提问来源于stack exchange,提问作者LeTest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:54:07