私はscala 2.0.2プレイフレームワークを使用してWeb APIを実装しています。私はいくつかの取得パラメータを抽出して検証したいと思います。そしてこれのために私はオプションのフィールドを定義することができる遊びの "フォーム"を使用しています。デフォルト値を定義する方法プレーフレームワークフォームのオプションフィールド?
問題: これらのオプションフィールドについては、パラメータが渡されない場合はデフォルト値を定義する必要があります。 コードが正しくこれら三つのユースケースを解析することを意図している:
- /テストトップ= ABC(エラーは、ABCは整数でない)
- /テスト= 123上面(有効、上面123です)?
def test = Action { implicit request => case class CData(top:Int) val p = Form( mapping( "top" -> optional(number) )((top) => CData($top.getOrElse(42))) ((cdata:CData) => Some(Some(cdata.top))) ).bindFromRequest() Ok("all done.") }
:私は次のコードが出ている
- /テスト(有効、トップは42である(デフォルト値))
コードは機能しますが、それは間違いなくエレガントです。不足しているリクエストパラメータのデフォルト値を設定するだけで、多くのボイラープレートが使用されています。
誰もがよりクリーンでより一致したソリューションを提案できますか?
この提案されたソリューションはうまく機能します。残念ながら、このソリューションの唯一の欠点は、多数のデフォルトパラメータではうまく調整できないことです。リスティングフィルタリングをサポートする必要があるWebサービス/ Webアプリケーションを構築する場合、ルート内のすべてのデフォルトパラメータを公開すると、コードの読みやすさと堅牢性が低下する可能性があります。他のすべてのシナリオではこれは確かに好ましい解決策です – natbusa
役に立つと思われるヘルパーメソッドの実装で更新されました。 – lambdas
私は、デフォルトのパラメータについてよりコード駆動型のアプローチをプログラムするために、プレイフレームワークの拡張を提案しました。 https://github.com/playframework/Play20/pull/381を参照してください。 – natbusa