找不到参数marshaller的隐含值:spray.httpx.marshalling.ToResponseMarshaller

时间:2013-12-05 19:22:07

标签: scala spray spray-json

我正在使用

val akkaV = "2.2.3"
val sprayV = "1.2.0"
Seq(
  "io.spray"            %   "spray-can"     % sprayV,
  "io.spray"            %   "spray-routing" % sprayV,
  "io.spray"          %%  "spray-json"    % "1.2.5",
  "io.spray"            %   "spray-testkit" % sprayV,
  "com.typesafe.akka"   %%  "akka-actor"    % akkaV,
  "com.typesafe.akka"   %%  "akka-testkit"  % akkaV,

收到此错误:

  

找不到参数marshaller的隐含值:spray.httpx.marshalling.ToResponseMarshaller [List [org.bwi.models.Cluster]]

使用此代码:

object JsonImplicits extends DefaultJsonProtocol {
val impCluster = jsonFormat2(Cluster)

}

trait ToolsService extends HttpService with spray.httpx.SprayJsonSupport {

val myRoute = {

    import JsonImplicits._

    path("") { get { getFromResource("tools.html") } } ~
        pathPrefix("css") { get { getFromResourceDirectory("css") } } ~
        pathPrefix("fonts") { get { getFromResourceDirectory("fonts") } } ~
        pathPrefix("js") { get { getFromResourceDirectory("js") } } ~
        path("clusters") {
            get {
                complete {
                    val result: List[Cluster] = List(Cluster("1", "1 d"), Cluster("2", "2 d"), Cluster("3", "3 d"))
                    result //*****   ERROR OCCURS HERE *****
                }
            }
        }
}

}

我已经尝试过建议on this question,但它没有用,同样的错误。

我似乎无法弄清楚我需要导入的隐含内容。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

您需要确保JsonFormat类型的隐式Cluster在范围内,以便SprayJsonSupport知道如何编组该类型。有了这个,你应该自动获得默认格式的编组List[Cluster]的支持。

在发布的代码val impCluster = jsonFormat2(Cluster)中定义JsonFormat,但未将其标记为implicit,因此无法隐式解析类型类。将其更改为

implicit val impCluster = jsonFormat2(Cluster)

应解决问题。