我想做一些事情:
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作为动作中的正文解析器并将其从签名中删除来修复。并且能够使用一个或多个那些行动随意......任何想法?
谢谢!
更新
移动答案回答评论......
答案 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 ) )
} } }
如果您知道更干净的方式,请告诉我。