2015-05-25 28 views
3

在Play應用程式,使用薩拉特和卡斯巴,我想反序列化一個DBObjectTask類型的對象,但調用時.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" 
+0

錯字或錯誤:'com.mongodb.casbah.Imports._' DEP的雙進口。 – DaunnC

+0

是的,這是一個錯字:)但錯誤不是由此造成的。 – memoizr

回答

2

說明:

  • 首先,在一個包中定義爲 implicit val ctx = new Context { /* custom behaviour */ } 自定義上下文對象
  • 停止導入com.novus.salat.global._
  • 導入您自己的自定義上下文。

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

+0

是的,就是這樣!我不得不停止導入全局上下文並稍微調整一下自定義的上下文。謝謝您的幫助! – memoizr