PlayFramework에서는 Action이 뭔가 Restful 통신을 할때 반응하는 객체로 쓰여진다... 이번에는 이 Action을 활용하는 방법을 알아보자
자세한 사항은 : https://www.playframework.com/documentation/2.3.x/ScalaActionsComposition
object LoggingAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
Logger.info("Calling action")
block(request)
}
}
위와 같이LoggingAction을 만들고
def index = LoggingAction {
Ok("Hello World")
}
Action 대신에 LogginAction을 하면 콘솔창에서 Calling Action 로그를 확인 할 수 있다.
이번에는 Actino을 조금더 조합해서 활용해 보자
case class Logging[A](action: Action[A]) extends Action[A] {
def apply(request: Request[A]): Future[Result] = {
Logger.info("Calling action")
action(request)
}
lazy val parser = action.parser
}
Logging 이라는 Action을 정의하고
object LoggingAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block:(Request[A]) => Future[Result]) = {
Logger.info("***** LoggingAction *****")
block(request)
}
override def composeAction[A](action: Action[A]) = new Logging(action)
}
위에서 정의한 LoggingAction에 composeAction 을 override 한다. 쉽게 구별이 되도록 Log를 틀리게 작성하였다.
def index = LoggingAction {
Ok("Hello World")
}
의 실행 결과
[info] application - Calling action
def index = Logging {
Action {
Ok("Hello World")
}
}
의 실행결과
[info] application - Calling action
[info] application - ***** LoggingAction *****
'Development > Web & Server' 카테고리의 다른 글
[Play Framework2] Comet sockets (0) | 2015.05.25 |
---|---|
[Play Framework2] Streaming HTTP responses (0) | 2015.05.25 |
[Play Framework2] Session and Flash scopes (0) | 2015.05.22 |
[Play Framework2] Setting and discarding cookies (0) | 2015.05.20 |
[Play Framework2] Http Routing (0) | 2015.05.19 |