我是新来斯卡拉,并试图写一个小REST API。
这里是我的路由定义:
package com.example
import akka.actor.Actor
import com.example.core.control.CrudController
import spray.routing._
class ServiceActor extends Actor with Service {
def actorRefFactory = context
def receive = runRoute(routes)
}
trait Service extends HttpService {
val crudController = new CrudController()
val routes = {
path("ads" / IntNumber) { id =>
get {
complete(
crudController.getFromElasticSearch(id)
)
}
}
}
}
这里是我的控制器
package com.example.core.control
import com.example._
import org.elasticsearch.action.search.SearchResponse
import scala.concurrent._
import ExecutionContext.Implicits.global
class CrudController extends elastic4s
{
def getFromElasticSearch (id:Integer) : Future[String] = {
val result: Future[SearchResponse] = get
result onFailure {
case t: Throwable => println("An error has occured: " + t)
}
result map { response =>
response.toString
}
}
}
当我尝试运行此代码,我得到了以下异常:
Error:(22, 58) could not find implicit value for parameter marshaller: spray.httpx.marshalling.ToResponseMarshaller[scala.concurrent.Future[String]]
crudController.getFromElasticSearch(id)
我理解得很好这个错误,喷雾需要一个隐含的编组,以马歇尔我的未来[字符串]对象。 但我有点困惑,因为在文档中,我们可以读
Scala编译器会寻找你的类型做你的自定义对象转换成客户端接受的一个代表性的工作在范围内隐编组器。 喷雾带有已经定义了以下marshallers(如在DefaultMarshallers性状隐式对象)来源https://github.com/spray/spray/wiki/Marshalling-and-Unmarshalling
在我的情况下所需的marshallers属于DefaultMarshallers,我不应该隐含的他通过自己..我应该?