2016-11-03 6 views
1

私は2つのシンプルなAPIを持っている:プレーフレームワーク2.5でHTTPメソッドをプロキシする方法は?

GET  /users/me/photos  controllers.api.UserController.getMyPhotos 
GET  /users/:userId/photos controllers.api.UserController.getPhotos(userId: Int) 

はここgetPhotosです:

def getPhotos(userId: Int) = SecuredAction.async { 
    logger.info(s"Searching for user $userId's photos") 

    userPhotosRepo.findByUserId(userId).map { 
    photos => Ok(Json.toJson(photos)) 
    } 
} 

ここgetMyPhotosです:

def getMyPhotos = SecuredAction.async { request => 

    request.identity.id.map { currentUserId => 
    logger.info(s"Searching for current user's photos") 

    getPhotos(currentUserId) // doesn't work 
    }.getOrElse(Future.successful(InternalServerError)) 
} 

どのように私はgetPhotosに至るgetMyPhotosプロキシを作ることができるヘルパーメソッドを作成することなく、彼らは両方とも呼びますか?

+0

を行うための適切な方法でなければなりませんあなたの懸念のために

エラーが何を返しますか?私はあなたのコードは動作するはずです(SecuredActionのコードは 'getMyPhotos'と' getPhotos'のために一度二度呼び出されます) – vdebergue

答えて

1

ここで、あなたは最初のアクション

val ans: Result = Redirect(routes.api.UserController.getPhotos(request.identity.id)) 

の結果をしたい場合、私はそれが何を願ってあなたのケースでは

routes.api.UserController.getPhotos(request.identity.id) 

をプレイフレームワーク

[full package].routes.[controller].[method] 

が提供するリバースルーティングを使用することができますあなたは尋ねようとしていました。

EDIT:これはそれを

def getPhotos(userId: Long) = SecuredAction.async { 
    userPhotosRepo findByUserId(userId) map { 
    photos => Ok(Json.toJson(photos)) 
    } 
} 

def getMyPhotos = SecuredAction.async { request => 
    request.identity.id map { id => 
     Redirect(routes.HomeController.getPhotos(id)) 
    } 
} 
+0

私はこれを試しましたが、エラーが出ます: 'play.sbt.PlayExceptions $ CompilationException :コンパイルエラー[play.api.mvc.ResultのインスタンスをHTTPレスポンスに書き込むことができません。 Writeable [play.api.mvc.Result]]を定義しようとしてください。 私のコードは 'Future.Successful(Ok(Redirect(routes.UserController.getPhotos(currentUserId))))'です。私は実際のHTTPリダイレクトを発行したくないので、これは透過的な内部リダイレクトであると仮定していますか? – jbrown

+0

他のアクションで呼び出すアクションはどれですか? - getPhotosでgetMyPhotosを呼び出すとしますか? - 別のアクションの1つのアクションから返信しますか? –

+0

いいえ、 'getMyPhotos'は自分の認証情報から現在のユーザーのIDを取得します。私は 'getMyPhotos'から' getPhotos(currentUserId) 'を呼び出した結果を返したいだけです。これは単なる便利な方法なので、クライアントはログインしているユーザーのIDが何であるかを知る必要はありません。 – jbrown

関連する問題