Ошибка распыления-json: не удалось найти неявное значение параметра um
У меня есть класс case
case class Person(val name: String)
object JsonImplicits extends DefaultJsonProtocol {
implicit val impPerson = jsonFormat1(Person)
}
Я пытаюсь использовать распылитель, чтобы разобрать сообщение:
post {
entity(as[Person]) { person =>
complete(person)
}
}
Однако я получаю, когда пытаюсь скомпилировать это:
src/main/scala/com/example/ServiceActor.scala:61: ошибка: не удалось найти неявное значение для параметра um: spray.httpx.unmarshalling.FromRequestUnmarshaller [com.example.Person]
Я не понимаю, что происходит, как я могу исправить это, чтобы работать?
спасибо
Ответы
Ответ 1
Директива Spray 'entity [E]' требует неявного маршаллера в своей области для типа E.
JsonImplicits
объект создает json marshaller и unmarshaller для типа E.
Вам нужно убедиться, что в области видимости находится implicit val impPerson
, другими словами, поставьте import JsonImplicits._
над определением маршрута.
Ответ 2
package abc.json
import spray.json.DefaultJsonProtocol
object OrderJsonProtocol extends DefaultJsonProtocol {
implicit val orderFormat = jsonFormat1(Order)
}
case class Order(orderNumber: String)
import akka.actor.Actor
import abc.json._
import spray.routing.HttpService
class OrderRestServiceActor extends Actor with HttpService {
def actorRefFactory = context
def receive = runRoute(route)
val route = {
import OrderJsonProtocol._
import spray.httpx.SprayJsonSupport.sprayJsonUnmarshaller
path("order") {
post {
println("inside the path")
entity(as[Order]) { order =>
complete(s"OrderNumber: ${order.orderNumber}")
}
}
}
}
}