Spray-json не может маршалировать Map[String,String]

У меня есть следующая настройка маршрута, но когда моя карта возвращается в первый полный блок, я получаю сообщение об ошибке:

could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[scala.collection.immutable.Map[String,String]]

import spray.routing.HttpService
import akka.actor.Actor
import spray.http.HttpRequest
import spray.routing.RequestContext
import spray.json.DefaultJsonProtocol._


class UserServiceActor extends Actor with RestUserService {
  def actorRefFactory = context
  def receive = runRoute(linkRoute)

}

trait RestUserService extends HttpService {

  val userService = new LinkUserService

  def linkRoute = 
    pathPrefix("user" / Segment) {
      userId =>
        path("link") {
          parameters('service ! "YT") {
            complete {
              Map("status"-> "OK", "auth_url" -> "http://mydomain.com/auth")
            }
          }
        }
    }
}

Согласно этому тесту Я должен иметь возможность конвертировать карту в json, когда импортируется DefaultJsonProtocol._, но даже это не удается:

val map:Map[String, String] = Map("hi"->"bye")
map.toJson

Cannot find JsonWriter or JsonFormat type class for scala.collection.mutable.Map[String,String]

Не уверен, что не так :(


person ThaDon    schedule 11.09.2013    source источник


Ответы (1)


Кто-то в списке рассылки спрея указал, что создаваемая карта является изменяемой, спрей-json не будет ее маршалировать. Я изменил его на scala.collection.immutable.Map, а также добавил следующие импорты:

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

И теперь все отлично работает.

person ThaDon    schedule 13.09.2013
comment
МОЙ БОГ. После 30 минут копания в Интернете наконец-то найдено решение, которое соответствует последним изменениям API спрея. Благодарю вас! Без импорта я не смог маршалировать JSObject. - person Pawel Szulc; 19.09.2014
comment
@PawelSzulc я чувствую то же самое - person Weiming; 08.12.2017