spray-json错误:无法找到参数um的隐含值

时间:2014-01-05 09:57:49

标签: scala akka implicit-conversion spray

我有这个案例类

case class Person(val name: String)

object JsonImplicits extends DefaultJsonProtocol {
  implicit val impPerson = jsonFormat1(Person)
}

我正在尝试使用spray-json来解析发布请求:

  post {
    entity(as[Person]) { person =>
      complete(person)
    }
  }

但是当我尝试编译时,我得到了:

  

src / main / scala / com / example / ServiceActor.scala:61:错误:无法   找到参数um的隐含值:   spray.httpx.unmarshalling.FromRequestUnmarshaller [com.example.Person]

我不明白发生了什么,我怎么能解决这个问题呢?

感谢

2 个答案:

答案 0 :(得分:13)

Spray的'entity [E]'指令要求在其类型E的范围内使用隐式编组器。 JsonImplicits对象为类型E创建json marshaller和unmarshaller。

您需要确保implicit val impPerson在范围内,换句话说,将import JsonImplicits._放在路线定义之上。

答案 1 :(得分:-1)

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}")
        }

      }
    }

  }

}