Ответ 1
Вам также необходимо импортировать формат, который вы определили в области маршрута:
import JollyJsonProtocol._
get {
complete {
List(new ElementResponse(...), new ElementResponse(...))
}
}
Я использую spray-json для сортировки списков пользовательских объектов в JSON. У меня есть следующий класс case и его JsonProtocol.
case class ElementResponse(name: String, symbol: String, code: String, pkwiu: String, remarks: String, priceNetto: BigDecimal, priceBrutto: BigDecimal, vat: Int, minInStock:Int, maxInStock: Int)
object JollyJsonProtocol extends DefaultJsonProtocol with SprayJsonSupport {
implicit val elementFormat = jsonFormat10(ElementResponse)
}
Когда я пытаюсь вставить такой маршрут, как этот:
get {
complete {
List(new ElementResponse(...), new ElementResponse(...))
}
}
Я получаю сообщение об ошибке:
could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[List[pl.ftang.scala.polka.rest.ElementResponse]]
Возможно, вы знаете, в чем проблема?
Я использую Scala 2.10.1 с распылителем 1.1-M7 и спрей-json 1.2.5
Вам также необходимо импортировать формат, который вы определили в области маршрута:
import JollyJsonProtocol._
get {
complete {
List(new ElementResponse(...), new ElementResponse(...))
}
}
Это старая проблема, но я чувствую, что отдаю свой 2c. Сегодня смотрел похожие проблемы.
Марцин, кажется, что ваша проблема не была фактически решена (насколько я могу прочитать) - почему вы приняли один ответ?
Вы пытались добавить import spray.json.DefaultJsonProtocol._
в места? Они отвечают за работу, например, Seq
s, Map
s, Option
и Tuple
. Я предполагаю, что это может быть причиной вашей проблемы, так как это List
, которое не преобразуется.
Самый простой способ сделать это - сделать строку из вашего списка или вам придется иметь дело с ChunckedMessages:
implicit def ListMarshaller[T](implicit m: Marshaller[T]) =
Marshaller[List[T]]{ (value, ctx) =>
value match {
case Nil => ctx.marshalTo(EmptyEntity)
case v => v.map(m(_, ctx)).mkString(",")
}
}
В секундах можно преобразовать ваш список в Stream[ElementResponse]
и позволить спрей chunck для вас.
get {
complete {
List(new ElementResponse(...), new ElementResponse(...)).toStream
}
}