9

リクエストボディのバイト配列へのアクセスは、アクションを定義するときに適切なボディパーサーを使用する限り、簡単request.body.asRaw...です。

ただし、ActionBuilder現在、本体へのアクセスが避けられない HMAC で保護されたアクション用の を構築しています。問題は、ActionBuilders の定義がリクエスト タイプの点で一般的であるため、ボディ パーサーの点でもあることです。

def invokeBlock[A](request: Request[A], block: HmacRequest[A] => Future[SimpleResult])

A型の制約がないため、 からリクエスト本文にアクセスする方法はないようですRequest[_]

私の特定のケースでは、次のようなことをするとうまくいきます:

request.body.asInstanceOf[AnyContentAsJson].json.toString()...

しかし、それは私にとって受け入れられる解決策ではありません。

また、カスタム ボディ パーサーを定義して に適用しようとしましたRequest[_]が、結果は空でした。

の本体にアクセスするにはどうすればよいですかRequest[_](バイト配列表現で十分です)。


ActionBuilder更新:たとえば、カスタム解析を行う別のアクションで処理全体をラップするなどして、内のリクエスト本文にアクセスできる場合、それも許容できる解決策です。しかし、それがどのように機能するかわかりません...ユーザーロジックに干渉することなく、任意のユーザー定義アクションをHMAC機能とともに使用できるという意味で、ソリューションは再利用可能でなければなりません。

4

2 に答える 2