默认情况下,SpringData的MappingMongoConverter
为MongoDB中保存的每个对象添加一个额外的“ _class ”列。 例如,
public class User {
String username;
String password;
//...getters and setters
}
保存
MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");
User user = new User("mkyong", "password123");
mongoOperation.save(user, "users");
结果
> db.users.find()
{
"_class" : "com.mkyong.user.User",
"_id" : ObjectId("5050aef830041f24ff2bd16e"),
"password" : "new password", "username" : "mkyong"
}
SpringData创建这个额外的“ _class ”是有原因的 。 要删除此额外的“ _class ”,请覆盖MappingMongoConverter
,并传递一个new DefaultMongoTypeMapper(null)
。
在这里,我们向您展示如何以注释或XML方式删除_class。
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文件中。
<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>
3.再次测试
再次保存,“ _ class”消失了。
> db.users.find()
{
"_id" : ObjectId("random code"),
"password" : "new password", "username" : "mkyong"
}
参考文献
标签: mongodb spring-data
翻译自: https://mkyong.com/mongodb/spring-data-mongodb-remove-_class-column/