要するに、多くのオプションがあります...すべてが少しずつ異なります。次の URL 形式を使用できます。
/foo/bar?color=red&color=blue
/foo/bar?color=red,blue
/foo/bar?color=[red,blue]
/foo/bar?color[]=red,blue
次のいずれかを実行できます。
1.プレイフォームを使う
シンプルな設定:
// form definition
case class ColorParams(colors:Seq[String])
val myForm = Form(formMapping(
"color" -> seq(text(1, 32)))(ColorParams.apply)(ColorParams.unapply)
// in your controller method call
val params = myForm.bindFromRequest()
URL の例:/foo/bar?color[]=red,blue
になりますList("red","blue")
残念ながら、多くの API がフォーマットcolor=red,blue
またはcolor=red&color=blue
2. 独自のカスタム クエリ文字列パーサーを作成する
より複雑ですが、制約、テストを記述し、すべてを Router に任せることができます。プロは、無効なクエリがコントローラーに届かないことです。
次に、Routes ファイルで次のように使用します。
case class ColorParams(colors:List[MyColorEnum])
GET /foo/bar? controllers.Example.getBar(color:ColorParams)
URL の例:/foo/bar?color=red,blue
自分で文字列を解析しているため、このメソッドを使用して、この投稿の多くの文字列レイアウトを希望どおりに動作させることができます。QueryStringBindableの詳細を参照してください。後で完全な例を追加します。
3. Routes ファイルで配列パラメーターを定義します。
GET /foo/bar? controllers.Example.getBar(color:Seq[String])
// inside Example.scala
def getBar( colors:Seq[String] ) = {
???
}
URL の例:/foo/bar?color=red&color=blue
注: color
URL の名前である Routes ファイルで使用しましたが、わかりやすくするためcolors
にメソッドで使用しました。getBar
これらの名前は一致する必要はなく、型だけが一致します。
落とし穴
これは、2 つの文字列ではなく/foo/bar?color=red,blue
1 つの文字列の Seq である Seq('red,blue') になるため、注意が必要ですが、デバッガーでは として表示されます。デバッガーで確認する適切な値はです。スペースに注意してください。トリッキー。Seq(red,blue)
Seq(red, blue)