すべての/fooURIに対してBadRequest結果タイプを返したいとしましょう。
override def onBadRequest(r: RequestHeader, error: String) = {
BadRequest("Bad Request: " + error)
}
override def onRouteRequest(r: RequestHeader): Option[Handler] = {
if(r.uri.startsWith("/foo") onBadRequest("go away")
else super.onRouteRequest(r)
}
もちろん、期待されるリターンタイプはOption[play.api.mvc.Handler]
これに対処する慣用的な方法は何ですか?フィルタリングされた不良リクエストを処理するためのデフォルトのアプリケーションコントローラーメソッドを作成しますか?理想的にはonRouteRequest
、/ fooが実際にはであることがわかっているので、直接BadRequest
呼び出したいと思いonBadRequest
ます。
これは不自然な例であり、実際にURI yyyyMMdd日付パラメーターを検証しており、JodaTimeインスタンスに解析されない場合はBadRequestを実行しています。基本的には、すべてを処理するのではなく、特定の日付パラメーターをサニタイズするためのキャッチオールフィルターです。言うまでもなく、単一のコントローラーメソッド呼び出しは、無駄なスタックトレースでアプリケーションログを乱雑にすることを回避しますre:無効な日付解析変換(ユーザーが有料サブスクライバーを取得しようとしてURI日付を無意味に操作するため、これらのジャンクトレースエントリの数MBが毎日発生しますコンテンツ)