8

url-param id を取得したいのですが、うまくいきません。私を助けてくれる人はいますか?次のコードは機能しません。

URL:

http://localhost:9000/rest/alerts?ids[]=123?ids[]=456

Routes.conf

GET /restws/alerts{ids} controllers.AlertService.findAlertsForIds(ids: List[String])

AlertService.java

public static Result findAlertsForIds(List<String> ids){

 return ok("Coole Sache"); 

 }
4

4 に答える 4

2

要するに、多くのオプションがあります...すべてが少しずつ異なります。次の 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

注: colorURL の名前である Routes ファイルで使用しましたが、わかりやすくするためcolorsにメソッドで使用しました。getBarこれらの名前は一致する必要はなく、型だけが一致します。

落とし穴

これは、2 つの文字列ではなく/foo/bar?color=red,blue1 つの文字列の Seq である Seq('red,blue') になるため、注意が必要ですが、デバッガーでは として表示されます。デバッガーで確認する適切な値はです。スペースに注意してください。トリッキー。Seq(red,blue)Seq(red, blue)

于 2016-05-13T16:24:09.490 に答える
1

このようにIDを文字列として渡してみてください http://<hostname>:9000/rest/alerts?ids=123,456,789

次に、文字列に split() 関数を適用して配列を取得します。

それが役に立てば幸い。

于 2013-06-18T08:51:14.637 に答える
0

プレイ 2.5:

// http://localhost:9000/myview?option=qwer=5&option=pass&option=43,56&otherOption=5

class MyController extends Controller  {
  def myview() = Action { implicit request =>
    println(request.queryString)

戻り値:

Map(option -> Buffer(qwer=5, pass, 43,56), otherOption -> Buffer(5))
于 2016-08-27T22:33:56.787 に答える