私はPlay(そしてScalaの新機能)に新しくなっていますので、これがマークから離れていれば私を許してください。Casbah&Play 2でJSONリソースを正しく表示する方法
私は基本的なエンドポイントを作成しようとしていますが、これはmongodbの基本的なCRUDです。
controllers/NoteController.scala
:
package controllers
import play.api.mvc._
import play.api.libs.json._
import data.Note
class NotesController extends Controller {
def index = Action {
Note.fetch match {
case Some(notes) => Ok(Json.toJson(notes))
case None => NotFound
}
}
def show(id: Long) = Action {
val note = Note.fetch(id)
note match {
case Some(note) => Ok(Json.toJson(note))
case None => NotFound
}
}
}
data/Note.scala
package data
import com.mongodb.casbah.Imports._
object Note {
def fetch = {
Mongo.db("note").find
}
def fetch(id: Long) = {
Mongo.db("note").findOne(
MongoDBObject("id" -> id)
)
}
}
上記のコードは、実際には動作しませんが、私は数字にしようとする日の最後のカップルのために壁に頭を叩いてきましたそれをどうやって得るのか。私はcasbahに付属のJSONシリアライザを使ってみましたが、そこにも喜びはありませんでした。私はmongoデータ(DBObject
)から関連するJSONを表示する方法を理解できないようです。
編集:
この質問へのコメントで述べたように、上記出力:
No Json serializer found for type Any. Try to implement an implicit Writes or Format for this type.
JSONとしてnote
をシリアル化しようとしているコード内のポイントを取得すると: Ok(Json.toJson(note))
このコードは何を出力しますか?以前はMongoでPlayを試してみませんでしたが、Json.toJsonはJSON形式の文字列またはJSON形式のプレーンオブジェクト(「Bean」)を変換します。だから、私はNote.fetchがこれらの事のどちらも返さないと思いますか? –
いいえ、これは私が持っているものの単純化されたバージョンですが、効果的には私がやろうとしていることです、私はそれが不適切な値を 'Json.toJson'に渡していると言うエラーを推測しています。私はそれを実行し、今質問に出力を入れます。 – danbroooks
よりモダンなMongoDB Scala Driver(http://mongodb.github.io/mongo-scala-driver)の使用をお勧めします。 'Document'クラスには、Json文字列の作成を簡略化するtoJsonメソッドがあります。 – Ross