繁体   English   中英

Play Framework 2.0 中的堆叠操作

[英]Stacking actions in Play Framework 2.0

我想按照以下方式做一些事情:

def findUser[ A ]( bp: BodyParser[ A ] )( id: Int )( f: User => Action[ A ] => Result )
def findProfile[ A ]( bp: BodyParser[ A ] )( id: Int )( f: Profile => Action[ A ] => Result )

其中两个(及更多)可以互换使用,或如下:

def create = findUser( parse.json ) { user => findProfile( parse.json ) { profile => implicit request => ...

我遇到的两个问题与 parse.json 有关(我认为我可以通过将 JsValue 作为动作中的正文解析器传递并将其从签名中删除来解决。并且能够使用其中一个或多个动作随意...有什么想法吗?

谢谢!

更新

移动答案以回答评论...

我能够使用以下签名让它工作。 这是重构的主体解析器...您可以将这些辅助函数(bodyParser、findUser、findProfile)放入特征中并使用它们扩展控制器...您也可以从签名中完全删除主体解析器并通过解析。 json 并产生 findUser( id ) 而不是 findUser( )( id )。

val bodyParser = parse.json //(I had to include the entire path to it...)
def findUser[ A ]( bp: BodyParser[ A ] = bodyParser )( id: Int )( f: User => Request[ A ] => Result )

def find( id: Int ) =
    IsLoggedIn( ) {
        findUser( )( id ) {
        user =>
        findProfile( )( user.id ){
            profile =>
            request =>
                Ok( toJson( profile ) )
} } }

如果您知道更清洁的方法,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM