Ошибка распыления-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}")
        }

      }
    }

  }

}