如何通过在喷涂中组合多个指令来创建自定义指令

时间:2015-02-28 12:15:07

标签: scala spray

我想为所有get,post,put和delete请求编写自定义指令,因为所有请求都需要授权。为了保持代码DRY,我想抽象那些样板(我必须授权超过100个请求)。我可以按如下方式处理所有获取请求

def method1 = Try("hi")       // controller methods
def method2 = Try("hello")

 path("getData1") {
    handleGetRequest(method1)
  }
  path("getData2") {
    handleGetRequest(method2)
  }


  def customGetDirective: Directive0 = {
    headerValueByName("token").flatMap { token =>
      authorize(checkAuthorization(token, ""))
      get.hflatMap {x=>
        respondWithMediaType(`application/json`)
      }
    }
  }

  def handleGetRequest(fn: => Try[_]) = {
    customGetDirective { ctx=>
    val result = fn
    val json = //result can be coverted to json
    ctx.complete(json)
    }
  }

我想为POST请求编写类似的Generic指令,以便我可以使用

  path("postData1") {
    handlePostRequest(saveToDb)
  }

    def handlePostRequest(fn: => Try[_]) = {
    customPostDirective { (ctx, JsonData)=>
    //.......
    ctx.complete(json)
    }
  }
  

但是,我不知道如何将RequestContext和JsonData作为元组

  I can write  like this,
  entity(as[String]) { jsonData => 
    customPostDirective{ ctx=>
  }
  }

如果我得到一个元组,它会更有用。 谢谢。

0 个答案:

没有答案