在MongoDB中将对象数组反序列化为JSON

时间:2014-05-08 14:03:20

标签: java json mongodb morphia nosql

我使用Morphia(版本0.99)将我的JSON映射到我的MongoDB(版本2.0)。 Web客户端和我的服务器之间的流数据工作正常。但现在我有一个用例,我不知道哪种模式最合适。我可以使用Morphia或MongoDB Java驱动程序来满足我的要求,还是需要使用Jackson和JPA 2.2表示法。

这是我的用例;

  1. 在所选集合(MongoDB)上调用Morphia查询
  2. 使用生成的Pojos ArrayList进行业务逻辑和演示(Primefaces)
  3. 还将生成的Pojo的ArrayList转换为JSON对象数组,但在Web客户端不需要的转换中删除Pojo属性
  4. 将转换后的JSON推送到Web客户端进行演示
  5. 使用Morphia转换一个Pojo是直接的,但是如何转换数组?

    return morph.toDBObject(obj).toString();
    

    在Morphia中是否有@JsonIgnore这样的符号忽略与JSON之间的转换?

    如何才能最有效地(如果可能的话,不使用更多库)来解决我的用例中的第三步。将ArrayList转换为JSON并忽略某些Pojo属性的转换?

1 个答案:

答案 0 :(得分:0)

我想出了解决问题的方法。它可能不是最优雅但它按照我想要的方式工作,我不必包含其他库(如Gson和Jackson)将我的Pojo数组列表反序列化为Json,我只使用了MongoDB Java驱动程序中的类和Morphia API。我还添加了一个简单的参数列表来去除不必要的属性值以推送到客户端。

public static String deserializeToJSON(List<?> objList, String... removeAttributes) {
    List<DBObject> dbObjList = new ArrayList<>(objList.size());
    DBObject dbObj;
    for(Object obj :objList){
        dbObj = morph.toDBObject(obj);
        for(int i=0; i < removeAttributes.length; i++){
        debug("Removed DBObject filed: " +dbObj.removeField(removeAttributes[i]));                                    
        }
        dbObjList.add(dbObj);
    }             
    String json = JSON.serialize(dbObjList);
    return json;
}