playframework - Play Framework 将 val 放入 Action Builder Scala
问题描述
我有自定义 Action Builder,它必须检查我的 val 是否正确
class CheckAction @Inject()(parser: BodyParsers.Default)(implicit ec: ExecutionContext) extends ActionBuilderImpl(parser) {
override def invokeBlock[A](request: Request[A], block: Request[A] => Future[Result]) = {
if (Base16.decode( HERE I NEED MY VAL).isSuccess) block(request) else resolve(Results.Forbidden)
}
}
我的路线是这样的
GET /api/block/:id controllers.BlockController.findBlockApi(id: String)
控制器是
def findA(id: String): Action[AnyContent] = checkAction(id) {
....
那么我怎样才能把我的 :id 从路由放到我的自定义操作构建器中呢?
解决方案
寻找答案。1) 动作生成器:
class Base16CheckAction(parser: BodyParsers.Default, modifierId: String) extends ActionBuilderImpl(parser) {
override def invokeBlock[A](request: Request[A], block: Request[A] => Future[Result]): Future[Result] =
if (Base16.decode(modifierId).isSuccess) block(request) else resolve(Results.BadRequest)
}
class Base16CheckActionFactory @Inject()(parser: BodyParsers.Default) {
def apply(modifierId: String): Base16CheckAction = new Base16CheckAction(parser, modifierId)
}
2) 控制器:
@Inject(base16Check: Base16CheckActionFactory...)
def findHeaderView(id: String): Action[AnyContent] = base16Check(id).async {
....
推荐阅读
- node.js - F5 在 Azure Cloud Shell 中不开始调试
- firebase - 当 Firebase 功能崩溃时,如何设置 Web 挂钩以向 Slack 发送消息?
- c# - 二头肌 - 如何通过循环创建对象数组,每次迭代创建 2 个或更多对象
- reactjs - 如何在新选项卡上使用 axios 输出
- html - 如何将 HTML 代码分配给 Windows shell 脚本中的变量?
- selenium - Selenium IDE 测试在 GUI 中运行 - 但在 CL 中运行时失败(链接文本不可见)
- javascript - 谷歌浏览器打开图像文件而不是下载它
- c# - 如何根据用户输入在预制件中旋转多个刚体
- angular - 如何在Angular中为tippy.js工具提示设置不同的颜色
- python - 如何使用 django Forms 在数据库表中为 ChoiceField 添加一列