【发布时间】:2023-03-24 13:20:01
【问题描述】:
我是 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))
【问题讨论】:
-
这段代码输出了什么?我以前没有尝试过在 Mongo 中使用 Play,但我知道 Json.toJson 会将 JSON 格式的字符串或普通对象(“bean”)转换为 JSON。所以我猜 Note.fetch 不会返回这些东西?
-
不,这是我所拥有的简化版本,但实际上正是我想要做的,我猜它错误地说它正在将不适当的值传递给
Json.toJson。我现在将运行它并将输出放入问题中。 -
我建议使用更现代的 MongoDB Scala 驱动程序 (mongodb.github.io/mongo-scala-driver)。
Document类有一个 toJson 方法,可以简化 Json 字符串的创建。
标签: json mongodb scala playframework casbah