Spring data MongoDb: MappingMongoConverter remove _class

后端 未结 10 964
迷失自我
迷失自我 2020-12-04 21:48

The default MappingMongoConverter adds a custom type key (\"_class\") to each object in the database. So, if I create a Person:

package my.d         


        
10条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-04 22:27

    While, Mkyong's answer still works, I would like to add my version of solution as few bits are deprecated and may be in the verge of cleanup.

    For example : MappingMongoConverter(mongoDbFactory(), new MongoMappingContext()) is deprecated in favor of new MappingMongoConverter(dbRefResolver, new MongoMappingContext()); and SimpleMongoDbFactory(new Mongo(), "databasename"); in favor of new SimpleMongoDbFactory(new MongoClient(), database);.

    So, my final working answer without deprecation warnings is :

    @Configuration
    public class SpringMongoConfig {
    
        @Value("${spring.data.mongodb.database}")
        private String database;
    
        @Autowired
        private MongoDbFactory mongoDbFactory;
    
        public @Bean MongoDbFactory mongoDBFactory() throws Exception {
            return new SimpleMongoDbFactory(new MongoClient(), database);
        }
    
        public @Bean MongoTemplate mongoTemplate() throws Exception {
    
            DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory);
    
            // Remove _class
            MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, new MongoMappingContext());
            converter.setTypeMapper(new DefaultMongoTypeMapper(null));
    
            return new MongoTemplate(mongoDBFactory(), converter);
    
        }
    
    }
    

    Hope this helps people who would like to have a clean class with no deprecation warnings.

提交回复
热议问题