带有隐式json格式的Scala activerecord

带有隐式json格式的Scala activerecord,json,scala,activerecord,implicit,Json,Scala,Activerecord,Implicit,我有一个scala activerecord: case class Person(name: String) extends ActiveRecord with Timestamps object Person extends ActiveRecordCompanion[Person] 一切正常 突然,我想提供一个API,并用实体的json表示进行repond,所以我修改了代码: case class Person(name: String) extends ActiveRecord wit

我有一个scala activerecord:

case class Person(name: String) extends ActiveRecord with Timestamps
object Person extends ActiveRecordCompanion[Person]
一切正常

突然,我想提供一个API,并用实体的json表示进行repond,所以我修改了代码:

case class Person(name: String) extends ActiveRecord with Timestamps
object Person extends ActiveRecordCompanion[Person] with DefaultJsonProtocol {
  implicit val jsonFormat = jsonFormat1(Request)
}
现在它导致了一个异常:

com.github.aselab.activerecord.SchemaSettingException: Cannot find table definition of class Person
  at com.github.aselab.activerecord.ActiveRecordException$.tableNotFound(ActiveRecordException.scala:48)
  at com.github.aselab.activerecord.Config$$anonfun$schema$1.apply(ActiveRecordConfig.scala:29)
  at com.github.aselab.activerecord.Config$$anonfun$schema$1.apply(ActiveRecordConfig.scala:29)
  at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
  at scala.collection.AbstractMap.getOrElse(Map.scala:59)
  at com.github.aselab.activerecord.Config$.schema(ActiveRecordConfig.scala:29)
  at com.github.aselab.activerecord.ActiveRecordBaseCompanion$class.schema(ActiveRecord.scala:116)
  at Person$.schema$lzycompute(Request.scala:12)
  at Person$.schema(Request.scala:12)
  at com.github.aselab.activerecord.ActiveRecordBaseCompanion$class.table(ActiveRecord.scala:123)
  at Person$.table$lzycompute(Request.scala:12)
  at Person$.table(Request.scala:12)
  at com.github.aselab.activerecord.ActiveRecordBaseCompanion$class.all(ActiveRecord.scala:133)
  at Person$.all(Request.scala:12)
  at com.github.aselab.activerecord.inner.CompanionIterable$class.companionToIterable(Implicits.scala:15)
  at Person$.companionToIterable(Request.scala:12)
  at Person$.<init>(Request.scala:13)
  at Person$.<clinit>(Request.scala)
  ... 34 more
断点B在此:

def registerSchema(s: ActiveRecordTables) = {
  conf = s.config
  s.all.foreach(t => _tables.update(t.posoMetaData.clasz, s))
}
对于第一个代码(没有json隐式),执行将命中断点B


对于第二个代码(包括json隐式),执行首先命中断点A,从而导致异常。

json支持在scala activerecord的0.3.1版中工作,请参阅和。目前,对于最新版本0.3.0,您可以使用第一个代码和表单值反序列化:

case class Person(name: String) extends ActiveRecord with Timestamps
object Person extends ActiveRecordCompanion[Person]
在您的设备(如喷洒控制器)中:

import spray.httpx.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._

requestContext.complete(Person.find(id).toFormValues)
方法
toFormValues
将返回
Map[String,String]
,可以通过
spray json
隐式转换为json

import spray.httpx.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._

requestContext.complete(Person.find(id).toFormValues)