mongo中插入的数据含有_class信息

  • Post author:
  • Post category:其他


mongo中插入的数据去掉_class


在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. }




多了_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. public


    @Bean


  4. MongoDbFactory mongoDbFactory()

    throws

    Exception {


  5. return


    new

    SimpleMongoDbFactory(

    new

    Mongo(),

    “database”

    );

  6. }



  7. public


    @Bean


  8. MongoTemplate mongoTemplate()

    throws

    Exception {



  9. MappingMongoConverter converter =


  10. new

    MappingMongoConverter(mongoDbFactory(),

    new

    MongoMappingContext());

  11. converter.setTypeMapper(

    new

    DefaultMongoTypeMapper(

    null

    ));


  12. MongoTemplate mongoTemplate =

    new

    MongoTemplate(mongoDbFactory(), converter);



  13. return

    mongoTemplate;


  14. }



  15. 2

    )XML配置文件

  16. <pre name=

    “code”


    class

    =

    “java”

    ><mongo:mongo host=

    “localhost”

    port=

    “27017”

    />

  17. <mongo:db-factory dbname=

    “database”

    />


  18. <bean id=

    “mappingContext”



  19. class

    =

    “org.springframework.data.mongodb.core.mapping.MongoMappingContext”

    />


  20. <bean id=

    “defaultMongoTypeMapper”



  21. class

    =

    “org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper”

    >

  22. <constructor-arg name=

    “typeKey”

    ><

    null

    /></constructor-arg>

  23. </bean>


  24. <bean id=

    “mappingMongoConverter”



  25. class

    =

    “org.springframework.data.mongodb.core.convert.MappingMongoConverter”

    >

  26. <constructor-arg name=

    “mongoDbFactory”

    ref=

    “mongoDbFactory”

    />

  27. <constructor-arg name=

    “mappingContext”

    ref=

    “mappingContext”

    />

  28. <property name=

    “typeMapper”

    ref=

    “defaultMongoTypeMapper”

    />

  29. </bean>


  30. <bean id=

    “mongoTemplate”


    class

    =

    “org.springframework.data.mongodb.core.MongoTemplate”

    >

  31. <constructor-arg name=

    “mongoDbFactory”

    ref=

    “mongoDbFactory”

    />

  32. <constructor-arg name=

    “mongoConverter”

    ref=

    “mappingMongoConverter”

    />

  33. </bean>


  34. </pre>

  35. <br>

  36. <br>

  37. <br>



版权声明:本文为yang292292原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。