Маршруты в play2: как сопоставить часть URL - PullRequest
2 голосов
/ 16 февраля 2012

Есть несколько URL-адресов, таких как:

http://localhost:9000/images/111111.jpg
http://localhost:9000/images/222222.png
http://localhost:9000/images/333333.gif

Они будут сопоставлены с методом:

def showImage(id: String) = Action {
    val image = Image.findById(id).get
    Ok.sendFile(new File(image.path)
}

Обратите внимание, что id - это единственная часть имени файла, отображаемая в URL-адресе.: 111111, 222222, 333333

Итак, я пишу отображение в маршрутах:

GET  /images/$id<\w+>.*          controllers.Images.showImage(id)

В части $id<\w+>.*, id соответствует id,и .* соответствует суффиксу, который будет игнорироваться.

Но синтаксис неправильный, сообщение об ошибке:

Identifier expected

Как это исправить?

1 Ответ

5 голосов
/ 17 февраля 2012

В настоящее время это невозможно сделать с помощью Play 2. В качестве обходного пути вы можете обработать свой аргумент в действии контроллера:

GET    /images/:id       controllers.Images.showImage(id)
def showImage(idWithExt: String) = Action {
  val id = idWithExt.takeWhile(_ != '.')
  ...
}
...