Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从Morphia/MongoDB将POJO对象集合序列化为JSON结构_Java_Json_Mongodb_Morphia - Fatal编程技术网

在Java中从Morphia/MongoDB将POJO对象集合序列化为JSON结构

在Java中从Morphia/MongoDB将POJO对象集合序列化为JSON结构,java,json,mongodb,morphia,Java,Json,Mongodb,Morphia,我使用Morphia(0.99)将POJO映射到MongoDB(2.0.6)。现在,我想从我的数据存储中返回一个集合/列表作为JSON结构,其中包含每个对象的ID,这些对象将与jQuery一起发送到浏览器客户端 我从数据存储中检索POJO列表,然后将每个对象转换为DBObjectMongoDB对象。除了对象的打印输出中不包括对象的id外,这一切正常。这可能是因为ID是从类A继承的。POJO B有很多属性成员,所以一个想法是制作一个简单的代理POJO,然后序列化 如何从DBObject列表(使用M

我使用Morphia(0.99)将POJO映射到MongoDB(2.0.6)。现在,我想从我的数据存储中返回一个集合/列表作为JSON结构,其中包含每个对象的ID,这些对象将与jQuery一起发送到浏览器客户端

我从数据存储中检索POJO列表,然后将每个对象转换为
DBObject
MongoDB对象。除了对象的打印输出中不包括对象的id外,这一切正常。这可能是因为ID是从类A继承的。POJO B有很多属性成员,所以一个想法是制作一个简单的代理POJO,然后序列化

如何从
DBObject
列表(使用Morphia或MongoDB驱动程序)生成JSON结构,以及如何为结构中的每个元素包含
id

另外,我已经看过
basicbonlist
MongoDB驱动程序对象或使用GSON(Google)lib,但我缺乏如何做到这一点的模式

POJO类

Class A {
    @Id
    private ObjectId id;
}

Class B extends A {
    ...

    @Override    
    public ObjectId getId() {
        return super.getId();
    }

    @Override
    public void setId(ObjectId id) {
        super.setId(id);
    }
    ...
}
Morphia/MongoDB查询

...
List<B> bList = bQry.asList();        
List<DBObject> dbObjList = Util.mapObjectToStringList((List<Object>)(List<?>)bList);
...

public static List<DBObject> mapObjectToStringList(List<Object> objList) {
    List<DBObject> dbObjectList = new ArrayList<DBObject>();
    Mapper mapper = morph.getMapper();        
    for(Object obj : objList) {
        DBObject dbObj = mapper.toDBObject(obj);
        Util.debug("Result as DB Object: " +dbObj.toString());
        dbObjectList.add(dbObj);
    }        
    return dbObjectList;
}
。。。
List bList=bQry.asList();
List dbObjList=Util.mapObjectToString((List)(List)bList);
...
公共静态列表MapObjectToString(列表对象列表){
List dbObjectList=new ArrayList();
Mapper Mapper=morph.getMapper();
用于(对象对象对象:对象列表){
DBObject dbObj=mapper.toDBObject(obj);
调试(“结果为DB对象:+dbObj.toString());
dbObjectList.add(dbObj);
}        
返回dbObjectList;
}

我也在寻找一个“干净”的答案。很好,希望有人能找到解决方案。您正在使用@Ankur的哪个版本的Morphia?如果您在mongodb中将数据存储为JSON,为什么要在发送到客户端之前转换为Java对象(DBObject)并转换回JSON?为什么不从mongodb中检索JSON并直接发送到客户端?@brainOverflow我认为这很容易。Morphia隐藏了MongoDB BSON和Java对象DBObject(JSON的二进制表示)处理。在尝试获取POJO对象的DBObject表示形式时,会出现异常。我所有的MongoDB查询都是通过Morphia来保持代码干净的。