spring boot中删除Data MongoDB的_class

时间:2022-05-06
本文章向大家介绍spring boot中删除Data MongoDB的_class,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在使用data mongodb插入数据的时候,插入后文档中会多出一个_class.

定义实体类

public class User {

    String username;
    String password;

    //...getters and setters
}

保存

User user = new User("yinjihuan", "password123");
mongoTemplate.save(user);

查询

> db.users.find()
{
    "_class" : "com.cxytiandi.bean.User",
    "_id" : ObjectId("5050aef830041f24ff2bd16e"),
    "password" : "password123",
    "username" : "yinjihuan"
}

想要去掉需要修改MappingMongoConverter的typemapper为new DefaultMongoTypeMapper(null)

使用注解方式自己创建template对象替代spring boot为我们默认创建的。

@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;

  }

}

如果不是spring boot项目则可以用xml配置。

<mongo:mongo host="localhost" port="27017" />
<mongo:db-factory dbname="database" />

 <bean id="mappingContext"
    class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />

 <bean id="defaultMongoTypeMapper"
    class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
    <constructor-arg name="typeKey"><null/></constructor-arg>
 </bean>

 <bean id="mappingMongoConverter"
    class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <constructor-arg name="mappingContext" ref="mappingContext" />
    <property name="typeMapper" ref="defaultMongoTypeMapper" />
 </bean>

 <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
 </bean>