2015-10-04 113 views
1

我的资源如下给出,我试图以json格式返回mongo表中的所有文档。REST风格的服务无法返回正确的JSON格式

@Path("/myresource") 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
public ArrayList<DBObject> getMongoObject() throws Exception { 
    MongoClient mongoClient = new MongoClient("localhost" , 27017); 
    DB db = mongoClient.getDB("zapshop"); 
    DBCollection collection = db.getCollection("admin"); 
    DBCursor cursor = collection.find(); 
    DBObject object = cursor.next(); 
    ArrayList<DBObject> token = new ArrayList<DBObject>(); 
    token.add(object); 
    while (cursor.hasNext()) { 
     object = cursor.next(); 
     token.add(object); 
     //System.out.println(token); 
    } 
    if (object == null) { 
     throw new WebApplicationException(Response.Status.NOT_FOUND); 
    } 
    return token; 
} 

这将返回JSON包含:

[{"type":"dbObject"},{"type":"dbObject"}] 

但是,当我在控制台打印出令牌它包含正确的集合,它是:

{ 
    "_id" : ObjectId("55fc4844f7aea67825dae9a1"), 
    "login_id" : "sam", 
    "password" : "***" 
} 

{ 
    "_id" : ObjectId("56110506d7ca91f604065fdc"), 
    "login_id" : "bam", 
    "password" : "***" 
} 

这是我想要什么它返回。我哪里错了,请尝试提供一个示例,因为我是RESTful服务的新手。

+0

有一个JSON序列化你试过'return.toString()'含)'String'的返回类型getMongoObject的'('。请参阅[BasicDBObject的API文档](http://api.mongodb.org/java/2.6/com/mongodb/BasicDBObject.html#toString%28%29) – thegauravmahawar

+0

您的意思是public String getMongoObject(){.... return token.toString();}? –

+0

现在,我试了一下,它的工作原理。哇,我怎么错过了。谢谢你的帮助,这是一个相当愚蠢的问题 –

回答

1

你应该这样做:

public String getMongoObject() throws Exception { 
    ....... 
    ....... 
    return token.toString(); 
} 

docs

的toString

public String toString() 

返回此对象

0

试试这个 我使用GSON从BasicDBObject转换成我自己的POJO这是TinyBlogDBObject

TinyBlogDBObject OBJ = convertJSONToPojo(cursor.next()的toString()); 私有静态TinyBlogDBObject convertJSONToPojo(JSON字符串){

Type type = new TypeToken<TinyBlogDBObject>(){}.getType(); 

return new Gson().fromJson(json, type); 

}