Маршруты в Play2: как соответствовать части URL

StackOverflow https://stackoverflow.com/questions/9312148

  •  26-10-2019
  •  | 
  •  

Вопрос

Есть несколько 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 соответствует идентификатору и .* Сопоставьте суффикс, который будет игнорироваться.

Но синтаксис неверен, сообщение об ошибке:

Identifier expected

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

Это было полезно?

Решение

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

GET    /images/:id       controllers.Images.showImage(id)
def showImage(idWithExt: String) = Action {
  val id = idWithExt.takeWhile(_ != '.')
  ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top