не удалось найти неявное значение для параметра marshaller: spray.httpx.marshalling.ToResponseMarshaller

я использую

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 *****
                }
            }
        }
}

}

Я попробовал предложение по этому вопросу, но оно не сработало. , такая же ошибка.

Кажется, я не могу понять, что такое неявное, что мне нужно импортировать. Любая помощь будет оценена по достоинству.


person Jim Barrows    schedule 05.12.2013    source источник
comment
Если вы завершите запрос только Cluster вместо List[Cluster], он скомпилируется? Является ли неявный jsonFormat для cluster в JsonImplicits?   -  person kong    schedule 05.12.2013
comment
Нет, это не так. Та же ошибка.   -  person Jim Barrows    schedule 06.12.2013
comment
Вероятно, он не может найти JsonFormat для Cluster. В приведенном выше impCluster это не implicit, хотя должно быть. Это ошибка копирования/вставки или это то, что в вашем коде?   -  person kong    schedule 06.12.2013
comment
Вот оно. Сделайте это ответом, и я отмечу его для вас!   -  person Jim Barrows    schedule 06.12.2013


Ответы (1)


Вы должны убедиться, что неявный JsonFormat для типа Cluster находится в области действия, чтобы SprayJsonSupport знал, как маршалировать этот тип. При этом вы должны автоматически получить поддержку маршалинга List[Cluster] из форматов по умолчанию.

В опубликованном коде val impCluster = jsonFormat2(Cluster) определяет JsonFormat, но он не помечен как implicit, поэтому класс типов не может быть неявно разрешен. Изменение его на

implicit val impCluster = jsonFormat2(Cluster)

должен решить проблему.

person kong    schedule 05.12.2013