我是Play的新手(对Scala来说有些新手),所以请原谅我,如果这是不合适的,尽管这就是我在这里发布的原因。
我正在尝试创建一个基本端点,它会消失并使用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.
当它获得代码中的点时,它会尝试将note
序列化为json:Ok(Json.toJson(note))
答案 0 :(得分:0)
我建议你在你使用的所有方法上声明预期的返回类型。它会告诉你问题所在。我猜你认为你从List[JsValue]
返回了Node.fetch
,但实际上由于某种原因你正在返回Any
。