我正在寻求创建一个JSON API,其中一些模型可以很好地推广。我是Spray的新手,所以我用一个简单的例子开始了一个尖峰。
但是我无法弄清楚波纹管代码发生了什么......
我已经导入了两个
据我所知,这是我必须做的,以便有一个隐含的范围,可以从JsonFormat转换为Marshaller。
编译错误:
TestService.scala:15:找不到参数um的隐含值:spray.httpx.unmarshalling.FromRequestUnmarshaller [my.company.Test [my.company.X]]
代码:
package my.company
import spray.routing.HttpService
import spray.json.{JsValue, JsObject, JsonFormat, DefaultJsonProtocol}
trait TestService extends HttpService {
import my.company.TestImplicits._
import spray.httpx.SprayJsonSupport._
val test =
path("test") {
post {
entity(as[Test[X]]) {
test => {
complete(s"type: ${test.common}")
}
}
}
}
}
trait Common {
def commonData: String
}
case class X(id: Long, commonData: String) extends Common
case class Y(commonData: String) extends Common
case class Test[T <: Common](comment: String, common: T)
object TestImplicits extends DefaultJsonProtocol {
implicit val xFormat = jsonFormat2(X)
implicit val yFormat = jsonFormat1(Y)
implicit val yTestFormat: JsonFormat[Test[Y]] = new JsonFormat[Test[Y]] {
def write(test: Test[Y]) = JsObject()
def read(js: JsValue) = Test("test", Y("y"))
}
implicit val xTestFormat: JsonFormat[Test[X]] = new JsonFormat[Test[X]] {
def write(test: Test[X]) = JsObject()
def read(js: JsValue) = Test("test", X(1L, "y"))
}
}
我将不胜感激任何帮助。提前谢谢。
解决
解决方案是(正如@jrudolp建议的那样):