我想为所有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=>
}
}
如果我得到一个元组,它会更有用。 谢谢。