Маршруты в Play2: как соответствовать части URL
-
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(_ != '.') ... }
Не связан с StackOverflow