2016-10-19 3 views
0

私は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))

+0

このコードは何を出力しますか?以前はMongoでPlayを試してみませんでしたが、Json.toJsonはJSON形式の文字列またはJSON形式のプレーンオブジェクト(「Bean」)を変換します。だから、私はNote.fetchがこれらの事のどちらも返さないと思いますか? –

+0

いいえ、これは私が持っているものの単純化されたバージョンですが、効果的には私がやろうとしていることです、私はそれが不適切な値を 'Json.toJson'に渡していると言うエラーを推測しています。私はそれを実行し、今質問に出力を入れます。 – danbroooks

+0

よりモダンなMongoDB Scala Driver(http://mongodb.github.io/mongo-scala-driver)の使用をお勧めします。 'Document'クラスには、Json文字列の作成を簡略化するtoJsonメソッドがあります。 – Ross

答えて

0

使用するすべてのメソッドで期待される戻り値の型を宣言することをお勧めします。あなたの問題がどこにあるかを表示します。 List[JsValue]Node.fetchから返信していると思いますが、何らかの理由で実際にAnyを返しています。

関連する問題