Spring Data MongoDB удалить столбец __class

Spring Data MongoDB удалить столбец _class

По умолчанию SpringDataMappingMongoConverter добавляет дополнительный столбец «_class» для каждого объекта, сохраненного в MongoDB. Например,

public class User {

    String username;
    String password;

    //...getters and setters
}

Сохрани это

    MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");
    User user = new User("example", "password123");
    mongoOperation.save(user, "users");

Результат

> db.users.find()
{
    "_class" : "com.example.user.User",
    "_id" : ObjectId("5050aef830041f24ff2bd16e"),
    "password" : "new password", "username" : "example"
}

SpringData создал этот дополнительный «_class» дляreason. Чтобы удалить этот лишний «_class», переопределитеMappingMongoConverter и передайтеnew DefaultMongoTypeMapper(null).

Здесь мы покажем вам, как удалить _class аннотацией или способом XML.

1. аннотирование

@Configuration
public class SpringMongoConfig{

  public @Bean
  MongoDbFactory mongoDbFactory() throws Exception {
    return new SimpleMongoDbFactory(new Mongo(), "database");
  }

  public @Bean
  MongoTemplate mongoTemplate() throws Exception {

    //remove _class
    MappingMongoConverter converter =
        new MappingMongoConverter(mongoDbFactory(), new MongoMappingContext());
    converter.setTypeMapper(new DefaultMongoTypeMapper(null));

    MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter);

    return mongoTemplate;

  }

}

2. XML

То же самое, но в XML-файле.




 

 
    
 

 
    
    
    
 

 
    
    
 

3. Проверьте это снова

Сохраните это снова, «_class» исчез.

> db.users.find()
{
    "_id" : ObjectId("random code"),
    "password" : "new password", "username" : "example"
}