如何使用Casbah& amp;正确呈现JSON资源玩2

时间:2016-10-19 19:27:23

标签: json mongodb scala playframework casbah

我是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))

1 个答案:

答案 0 :(得分:0)

我建议你在你使用的所有方法上声明预期的返回类型。它会告诉你问题所在。我猜你认为你从List[JsValue]返回了Node.fetch,但实际上由于某种原因你正在返回Any