【问题标题】:Casbah: No implicit view available errorCasbah:没有可用的隐式视图错误
【发布时间】:2015-05-25 14:11:33
【问题描述】:

在使用 Salat 和 Casbah 的 Play 应用程序中,我试图将 DBObject 反序列化为 Task 类型的对象,但在调用 .asObject 时出现此错误:

com.mongodb.casbah.Imports.DBObject 没有可用的隐式视图 => com.mongodb.casbah.Imports.MongoDBObject。发生错误 涉及默认参数的应用程序。

对象已使用.asDBObject 正确序列化,并按预期写入数据库。

是什么导致了这种行为,可以做些什么来解决它?以下是所涉及的模型:

package models

import db.{MongoFactory, MongoConnection}

import com.novus.salat._
import com.novus.salat.global._
import com.novus.salat.annotations._
import com.mongodb.casbah.Imports._
import com.mongodb.casbah.commons.Imports._
import play.api.Play


case class Task(label: String, _id: ObjectId=new ObjectId)

object Task {

  implicit val ctx = new Context {
    val name = "Custom_Classloader"
  }

  ctx.registerClassLoader(Play.classloader(Play.current))

  val taskCollection = MongoFactory.database("tasks")

  def create(label: String): Task = {
    val task = new Task(label)
    val dbObject = grater[Task].asDBObject(task)
    taskCollection.save(dbObject)
    grater[Task].asObject(dbObject)
  }

  def all(): List[Task] = {
    val results = taskCollection.find()
    val tasks = for (item <- results) yield grater[Task].asObject(item)
    tasks.toList
  }
}

版本

casbah: "2.8.1"
scala: "2.11.6"
salat: "1.9.9"

【问题讨论】:

  • 错字或错误:com.mongodb.casbah.Imports._ dep. 的双重导入。
  • 是的,这是一个错字:) 但错误不是由此引起的。

标签: mongodb scala playframework casbah salat


【解决方案1】:

关于创建自定义上下文的说明:

  • 首先,将自定义上下文定义为 implicit val ctx = new Context { /* custom behaviour */ } 在包对象中
  • 停止导入com.novus.salat.global._
  • 改为在任何地方导入您自己的自定义上下文。

来源:https://github.com/novus/salat/wiki/CustomContext

【讨论】:

  • 是的,就是这样!我不得不停止导入全局上下文并稍微调整自定义上下文。感谢您的帮助!
猜你喜欢
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多