我正在使用Jersey编写RESTful服务,并且数据存储在Mongodb数据库中。
我想从数据库中获取一项并将其JSON格式返回给客户端。这是我的代码:
try {
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("entities");
// Build search query
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("entity_name", entityName);
DBCursor cursor = coll.find(searchQuery);
try {
if (cursor.hasNext()) {
return cursor.next().toString();
} else {
return "Not found.";
}
} finally {
cursor.close();
mongoClient.close();
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
return "System error.";
但是我得到的数据包含一个名为id的字段:
"_id":{
"$oid":"525c8a4df33fa1b05dab6e6c"
},
我想从结果中消除该字段。怎么做?
第二个问题是:结果中的某些字段是日期。但是结果是这样的:
"publish_date":{
"$date":"1970-01-15T16:48:14.400Z"
},
我希望它显示为:
"publish_date":1970-01-15
我当时正在考虑使用某些第三方库(例如Jackson)来存储所有数据,然后将Jackson对象返回给客户端(Jersey可以将Jackson对象自动传输到正确的JSON格式的数据)。但就我而言,字段数不是固定的。我无法创建实体类来表示结果的结构。
你们有一些好的解决方案吗?
谢谢!
对于问题的第一部分,您需要使用投影来隐藏结果中的某些字段。
DBCursor cursor = coll.find(searchQuery, new BasicDBObject("_id", 0));
对于问题的第二部分,MongoDB Java驱动程序可以使用以下命令返回Date对象:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
document = cursor.next();
Date date = document.getDate("publish_date");
String dateStr = dateFormat.format(date);
如果要将此字符串放回结果文档中以便以JSON格式打印,则可以执行以下操作:
document.put("publish_date", dateStr);
否则,您可以使用新值构建BasicDBObject。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句