在Play Framework 2.0中堆叠操作

时间:2012-04-08 13:30:44

标签: scala playframework-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作为动作中的正文解析器并将其从签名中删除来修复。并且能够使用一个或多个那些行动随意......任何想法?

谢谢!

更新

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

1 个答案:

答案 0 :(得分:1)

我能够使用以下签名使其工作。这里是重构的主体解析器...您可以将这些辅助函数(bodyParser,findUser,findProfile)放在特征中并使用它们扩展控制器...您还可以从签名和传递解析中完全删除正文解析器。 json中的action和yield 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 ) )
} } }

如果您知道更干净的方式,请告诉我。