在使用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对象就可以过滤掉空值了
代码如下:
- public void updateSkinBySkinId(MonspSkinConf monspSkinConf){
- //获取集合
- DBCollection collection = mongoService.getCollection(MongoKeys.DB_NAME, MongoKeys.MONSP_SKIN_CONF);
- //用来定位要修改的数据
- DBObject id=new BasicDBObject("skinId",monspSkinConf.getSkinId());
- //将传入的实体类转换成jsonString并过滤空值后再重新转换成json对象
- String jsonStr = com.alibaba.fastjson.JSONObject.toJSONString(monspSkinConf);
- com.alibaba.fastjson.JSONObject toJS = com.alibaba.fastjson.JSONObject.parseObject(jsonStr);
- //新的数据
- DBObject state=new BasicDBObject(toJS);
- //将新的数据加以操作符$set,
- DBObject condition=new BasicDBObject();
- condition.put("$set",state);
- collection.update(id,condition);
- }
当然如果你不想过滤空值的话,也可以这样:
- String jsonStr = com.alibaba.fastjson.JSONObject.toJSONString(monspSkinConf,
- SerializerFeature.WriteMapNullValue);