spray-json error: could not find implicit value for parameter um

China☆狼群 提交于 2019-12-21 07:34:22

问题


I have this case class

case class Person(val name: String)

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

I'm trying spray-json in order to parse post request:

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

However I get when I try to compile this:

src/main/scala/com/example/ServiceActor.scala:61: error: could not find implicit value for parameter um: spray.httpx.unmarshalling.FromRequestUnmarshaller[com.example.Person]

I don't understand what's happening, how can I fix this to be working?

thanks


回答1:


Spray's 'entity[E]' directive requires implicit marshaller in its scope for the type E. JsonImplicits object creates json marshaller and unmarshaller for the type E.

You need to make sure that implicit val impPerson is in the scope, in other words put import JsonImplicits._ above the route definition.




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

      }
    }

  }

}


来源:https://stackoverflow.com/questions/20932234/spray-json-error-could-not-find-implicit-value-for-parameter-um

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!