私は次のコードを持っています:
@RequestMapping(value = "/envinfo", method = RequestMethod.GET)
@ResponseBody
public Map getEnvInfo()
{
BasicQuery basicQuery = new BasicQuery("{_id:'51a29f6413dc992c24e0283e'}", "{'envinfo':1, '_id': false }");
Map envinfo= mongoTemplate.findOne(basicQuery, Map.class, "jvmInfo");
return envinfo;
}
お気づきのとおり、コードは次のとおりです。
Map
オブジェクトに変換しますMap
オブジェクトは、ブラウザーに返される前に、Spring MongoDataによってJSONに変換されます。中間の変換手順を経ることなく、MongoDbから生のjsonを直接返すことは可能ですか?
すぐにこれを行うには、2つの方法があります。
CollectionCallback
でMongoTemplate
を使用するCollectionCallback
を使用して、返されたDBObject
を直接処理し、単純にtoString()
it処理できます。
_template.execute("jvmInfo", new CollectionCallback<String>() {
String doInCollection(DBCollection collection) {
DBCursor cursor = collection.find(query)
return cursor.next().toString()
}
}
_
例外は、SpringのDataAccessExceptions
に引き続き翻訳されます。クエリに対して返される結果は1つだけであると予想されるため、これはやや脆弱ですが、おそらくString
を生成しようとする場合は注意が必要です。
Converter
からDBObject
にString
を登録しますSpring Converter
を実装してtoString()
を実行できます。
_class DBObjectToStringConverter implements Converter<DBObject, String> {
public String convert(DBObject source) {
return source == null ? null : source.toString();
}
}
_
次に、XML構成を使用するか、customConversions()
をオーバーライドしてnew CustomConversions(Arrays.asList(new DBObjectToStringConverter()))
を返し、MongoConverter
に登録することができます。その後、次のことを簡単に行うことができます。
_String result = mongoTemplate.findOne(basicQuery, String.class, "jvmInfo");
_
表示されたばかりのコンバーターをSpring Data MongoDBに追加し、今後の1.3 GAリリースにデフォルトで登録し、 の修正の一部として修正を1.2.xに移植して戻します。 DATAMONGO-74 。
Oliverが指摘しているように、そのためにSpring Dataを使用できますが、MongoDBのより低レベルのJava Driver。を見てください。 MongoDB Java Driver 3.x または MongoDB Java Driver 2.x その使用方法に関するドキュメント運転者。
基本的に、あなたがする必要があるのはこれです:
_MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection coll = db.getCollection("testCollection");
BasicDBObject query = new BasicDBObject("_id", "51a29f6413dc992c24e0283e");
try (MongoCursor<Document> cursor = collection.find(query).iterator()) {
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
}
_
_MongoClient mongoClient = new MongoClient();
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("testCollection");
BasicDBObject query = new BasicDBObject("_id", "51a29f6413dc992c24e0283e");
try (DBCursor cursor = coll.find(query)) {
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
}
_
これにより、値__id
_を持つフィールド_51a29f6413dc992c24e0283e
_を持つコレクション内のすべてのドキュメントが印刷されます。