在使用mongodb的时候经常会遇到需要把实体类转换成json对象去的情况,但是转换成的json对象中,除了已经向bean里添加过的属性,其余未赋值的属性却在json中依然显示为空!这就造成了在使用mongodb的修改的时候,会用null值覆盖原来的值。

       之前在网上看到过使用filter过滤属性的博客http://blog.csdn.net/u013239111/article/details/52006046;我试了一下,因为公司用的是alibaba的fast json 总是会报错,经过一番查找后发现了原来fast json自带的就有过滤空字符串的功能,但是需要先将bean对象转换成jsonString,在将jsonString转换成json对象就可以过滤掉空值了

代码如下:

 

[java] view plain copy
 
  1. public void updateSkinBySkinId(MonspSkinConf monspSkinConf){  
  2.        //获取集合  
  3.        DBCollection collection = mongoService.getCollection(MongoKeys.DB_NAME, MongoKeys.MONSP_SKIN_CONF);  
  4.        //用来定位要修改的数据  
  5.        DBObject id=new BasicDBObject("skinId",monspSkinConf.getSkinId());  
  6.        //将传入的实体类转换成jsonString并过滤空值后再重新转换成json对象  
  7.        String jsonStr = com.alibaba.fastjson.JSONObject.toJSONString(monspSkinConf);  
  8.   
  9.        com.alibaba.fastjson.JSONObject toJS = com.alibaba.fastjson.JSONObject.parseObject(jsonStr);  
  10.   
  11.        //新的数据  
  12.        DBObject state=new BasicDBObject(toJS);  
  13.        //将新的数据加以操作符$set,  
  14.        DBObject condition=new BasicDBObject();  
  15.        condition.put("$set",state);  
  16.        collection.update(id,condition);  
  17.    }  

当然如果你不想过滤空值的话,也可以这样:

 

[java] view plain copy
 
  1. String jsonStr = com.alibaba.fastjson.JSONObject.toJSONString(monspSkinConf,  
  2. SerializerFeature.WriteMapNullValue);