我有这个案例类
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]
我不明白发生了什么,我怎么能解决这个问题呢?
感谢
答案 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}")
}
}
}
}
}