오늘도 개발자 Backend Developer

Spring에서 mongo 에 데이터 추가시 생기는 class 에 대해서

  • Spring Boot 자동설정으로 mongo를 사용할 경우 _class 값이 저장되는 결과값에 추가 됨.

_class 추가 확인

java 소스

MongoRepository.save(new ObjectEntity());

or

MongoOperations ops = new MongoTemplate(new Mongo(), "users");
ops.insert(new ObjectEntity());

mongo DB find

{ "_id" : ObjectId("5e5b8c7600871a0c570885a1"), "title" : "test", "content" : "content!!", "_class" : "kr.geun.sample.ObjectEntity" }

Spring Boot Bean 설정 확인

MongoConverter 변경하는 방법

  • org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration 를 확인
  • 위 설정 클래스 내에 있는 MongoDbFactoryDependentConfiguration 를 확인
   @Bean
    @ConditionalOnMissingBean({MongoConverter.class})
    MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context, MongoCustomConversions conversions) {
        DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
        MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
        mappingConverter.setCustomConversions(conversions);
        return mappingConverter;
    }
위 @Bean 설정을 변경하자
  • 아래 메소드를 추가하자.

mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));

MongoTemplate 설정을 변경하는 법

@Bean
public MongoTemplate mongoTemplate() throws Exception {

    DbRefResolver resolver = new DefaultDbRefResolver(mongoDbFactory);

    // Remove _class
    MappingMongoConverter converter = new MappingMongoConverter(resolver, new MongoMappingContext());
    converter.setTypeMapper(new DefaultMongoTypeMapper(null));

    return new MongoTemplate(mongoDBFactory(), converter);

}