spring mongodb中去掉_class列

来源:互联网 发布:levered beta知乎 编辑:程序博客网 时间:2024/06/03 21:14

在spring for mongodb中,会发现当一个pojo序列化为一个document时,会出现如下 
情况: 
  
public class User { 

String username; 
String password; 





  转变为mongodb 时 
 

Java代码  收藏代码
  1. MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");   
  2.     User user = new User("abc""password123");  
  3.     mongoOperation.save(user, "users");  

会发现document中,多了个_class属性: 
 
Java代码  收藏代码
  1. {   
  2.     "_class" : "com.abc.user.User",   
  3.       
  4.     ...................  
  5. }  

   多了_class的意义,在下面这个链接有很好的解答: 
http://stackoverflow.com/questions/6810488/spring-data-mongodb-mappingmongoconverter-remove-class/ 
,其实就是说,为了在把document转换成Java对象时能够转换到具体的子类. 
要去掉的方法简单:DefaultMongoTypeMapper类的构造函数的第一个参数是Type在MongoDB中名字. 设置为null的话就不会在保存时自动添加_class属性.所以需要覆写 

MappingMongoConverter。 
1)用注解的方法取消: 
  
Java代码  收藏代码
  1. @Configuration  
  2. public class SpringMongoConfig{  
  3.    
  4.   public @Bean  
  5.   MongoDbFactory mongoDbFactory() throws Exception {  
  6.     return new SimpleMongoDbFactory(new Mongo(), "database");  
  7.   }  
  8.    
  9.   public @Bean  
  10.   MongoTemplate mongoTemplate() throws Exception {  
  11.    
  12.       
  13.     MappingMongoConverter converter =   
  14.         new MappingMongoConverter(mongoDbFactory(), new MongoMappingContext());  
  15.     converter.setTypeMapper(new DefaultMongoTypeMapper(null));  
  16.    
  17.     MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter);  
  18.    
  19.     return mongoTemplate;  
  20.    
  21.   }  
  22.    
  23. 2)XML配置文件  
  24.    <pre name="code" class="java"><mongo:mongo host="localhost" port="27017" />  
  25. <mongo:db-factory dbname="database" />  
  26.    
  27.  <bean id="mappingContext"  
  28.     class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />  
  29.    
  30.  <bean id="defaultMongoTypeMapper"  
  31.     class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">  
  32.     <constructor-arg name="typeKey"><null/></constructor-arg>  
  33.  </bean>  
  34.    
  35.  <bean id="mappingMongoConverter"  
  36.     class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">  
  37.     <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />  
  38.     <constructor-arg name="mappingContext" ref="mappingContext" />  
  39.     <property name="typeMapper" ref="defaultMongoTypeMapper" />  
  40.  </bean>  
  41.    
  42.  <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
  43.     <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />  
  44.     <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />  
  45.  </bean>  
  46.   
  47. </pre>  
  48. <br>  
  49. <br>  
  50. <br>  
  51.     

http://jackyrong.iteye.com/blog/1687361


http://www.mkyong.com/mongodb/spring-data-mongodb-remove-_class-column/


0 0
原创粉丝点击