Распределение клиента по пользовательскому классу case в JSON

У меня есть следующие имплициты:

object MyJsonProtocol extends DefaultJsonProtocol {
  implicit val impStartObjSys = jsonFormat3(StartObj.Sys)
  implicit val impStartObjData = jsonFormat6(StartObj.Data)
  implicit val impStartObjStart = jsonFormat3(StartObj.Start)
}

Он отлично работает с маршрутизатором Spray, и я обычно могу разобрать объект в StartObj.Start (который принимает строку, sys и данные в качестве входных параметров)

Сейчас я пытаюсь написать нагрузочный тест и выполнять JSON-запросы, используя спрей-клиент. К сожалению, он не хочет принимать мой объект в качестве входного параметра, ошибка:

[ошибка] Load.scala:85: не удалось найти неявное значение для параметра доказательства типа >spray.httpx.marshalling.Marshaller[models.StartObj.Start] [ошибка] pipe(Post(serverHost, newUser)) [ошибка] ^

Я начал создавать маршаллер, который решил бы эту проблему:

  implicit val StartObjMarshaller =
    Marshaller.of[Start](ContentTypes.`application/json`) 
    { (value, contentType, ctx) ⇒ 
       ctx.marshalTo(HttpEntity(contentType, value))
    }

Но здесь он жалуется на то, что значение не имеет поддерживаемого типа. Ожидается только массив байтов или строка. Мне нужна строка, но в формате Json, как мне написать этот маршаллер, чтобы он правильно решил проблему?

Спасибо!


person Alex K    schedule 08.09.2013    source источник


Ответы (1)


Хорошо, я понял это. Мне нужно было добавить этот импорт для поддержки сортировки json:

import spray.httpx.SprayJsonSupport._

После этой функции сортировки будет:

  implicit def StartObjMarshaller[T](implicit writer: RootJsonWriter[T], 
      printer: JsonPrinter = PrettyPrinter) =
  Marshaller.delegate[T, String](ContentTypes.`application/json`) { value ⇒
    val json = writer.write(value)
    printer(json)
  }
person Alex K    schedule 08.09.2013
comment
Верно. Для уточнения: вам больше не нужно писать свой собственный маршаллер с SprayJsonSupport, потому что определение, которое вы цитируете, импортировано из SprayJsonSupport. - person jrudolph; 08.09.2013
comment
Да, это я тоже понял позже. Работает как шарм :) Спасибо. - person Alex K; 08.09.2013