首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在spray.io中设置编组器的响应码?

是否可以在spray.io中设置编组器的响应码?
EN

Stack Overflow用户
提问于 2015-08-10 20:31:45
回答 2查看 66关注 0票数 0

我有下面的代码片段,其中dataService返回OptionLocationDataResult。我希望在dataService返回None时设置NotFound,并在出现某些( ...)时将数据发送回来。

我有以下代码:

代码语言:javascript
复制
  val route: Route = {
    pathPrefix("service" / "data") {
      pathPrefix( "infobox") {
        get {
          parameters(('mes.as[String], 'oks.as[String])) {
            (me, okr) =>

              val resp = dataService.ask(GetocationInfoboxData(me,okr)).mapTo[LocationInfoboxDataResult]
                .map(remapInfoboxToResponseObject(_)).map { r =>
                r match {
                  case None => StatusCodes.NotFound
                  case Some(dataToRespond) => dataToRespond
                }
              }

              complete {
                resp
              }
          }
        }
      }
    }
  }


  implicit val responseMarhaller: Marshaller[LocationInfobox] = Marshaller.of[WikiLocationInfobox](ContentTypes.`application/json`) { (value, contentType, ctx) =>
    val result: String = mapper.writeValueAsString(value)
    ctx.marshalTo(HttpEntity(contentType, result))
  }

我无法从marshaller找到合适的方法,也无法通过完整的功能从路由找到合适的方法,我无法使其工作。

有没有更有经验的人能给我点提示?我是不是遗漏了一些重要的概念?

Thx

更新:错误消息“类型为FutureObject的表达式不符合预期的类型ToResponseMarsallable。

EN

回答 2

Stack Overflow用户

发布于 2015-08-10 21:00:35

代码看起来没问题,不确定有什么不起作用。试着用未来的Spray指令重写它,而不是完成未来本身:

代码语言:javascript
复制
val locationData = dataService.ask(GetocationInfoboxData(me,okr)).mapTo[LocationInfoboxDataResult]

onSuccess(locationData.map(remapInfoboxToResponseObject)) {
  case None => complete(StatusCodes.NotFound)
  case Some(data) => complete(data)
}
票数 0
EN

Stack Overflow用户

发布于 2015-08-10 22:19:17

这对利用MetaMarshallers的我来说很好。

代码语言:javascript
复制
          val resp = dataService.ask(GetocationInfoboxData(me, okr)).mapTo[LocationInfoboxDataResult].map(remapInfoboxToResponseObject(_)).map{
            r =>
              r match {
                case None => Left(StatusCodes.NotFound)
                case Some(data) => Right(data)
              }
          }
         complete(resp)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31919649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档