【问题标题】:Play Framework: Chain ActionsBuilder and ActionRefinerPlay 框架:链式 ActionsBuilder 和 ActionRefiner
【发布时间】:2015-04-30 21:48:00
【问题描述】:

我很绝望。 我尝试像官方文档的最后一段那样做 ActionComposition:https://playframework.com/documentation/2.3.x/ScalaActionsComposition

我的代码:

object ActionBuilder1 extends ActionRefiner[Request, Request] {
  override protected def refine[A](request: Request[A]): Future[Either[Result, Request[A]]] = Future {Right(request)}
}


object ActionBuilder2 extends ActionBuilder[Request] {
  def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) : Future[Result] = {
    block(request)
  }
}

在我的控制器中:

def yolo = ActionBuilder2 andThen ActionBuilder1 {
  Ok("ASd")
}

但是编译器说:

actions.ActionBuilder1.type does not take parameters
def yolo = ActionBuilder2 andThen ActionBuilder1 {
                                               ^

我真的不知道为什么......

【问题讨论】:

    标签: scala playframework playframework-2.0 actionbuilder


    【解决方案1】:

    我认为 Scala 无法理解您的意思:

    ActionBuilder2 andThen ActionBuilder1 { // Some block }
    

    所以最简单的方法似乎是将该链声明为独立的事物,然后将块应用于它:

    val actionChain = ActionBuilder2 andThen ActionBuilder1
    
    def yolo = actionChain { 
      Ok("yolo")
    }
    

    验证它是否以所需的顺序工作(2 然后1),通过日志记录:

    object ActionBuilder1 extends ActionRefiner[Request, Request] {
      override protected def refine[A](request: Request[A]): Future[Either[Result, Request[A]]] = Future {
        Logger.info("ActionBuilder1")
        Right(request)
      } 
    } 
    
    
    object ActionBuilder2 extends ActionBuilder[Request] {
      def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) : Future[Result] = {
        Logger.info("ActionBuilder2")
        block(request)
      }
    }
    

    在请求端点时在控制台中:

    [info] application - ActionBuilder2
    [info] application - ActionBuilder1
    

    【讨论】:

    • 你完全正确。我只是忘记了 actionChain 周围的括号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多