У меня есть фрагмент маршрута, который я хочу повторно использовать в нескольких сценариях:
val dirSegment = "licenses"
path( dirSegment ~ PathEnd ) {
redirect( dirSegment + "/", StatusCodes.MovedPermanently )
} ~
pathPrefix(dirSegment) {
path("") {
/* do something */
}
}
Я хотел бы превратить это в директиву (или параметризируемый маршрут?), где я могу указать значение dirSegment
val и произвольную дальнейшую маршрутизацию/код вместо path("") { /* do something */ }
white, сохраняя поведение перенаправления, выглядя примерно так:
directoryPath("licenses") {
path("") {
/* do something */
}
} ~
directoryPath("about") {
path("") {
/* do somthing else */
}
}
Принимая во внимание, что это было бы эквивалентно следующему поведению без всех повторений:
val dirSegment = "licenses"
val anotherDir = "About"
path( dirSegment ~ PathEnd ) {
redirect(dirSegment + "/", StatusCodes.MovedPermanently )
} ~
pathPrefix(dirSegment) {
path("") {
/* do something */
}
} ~
path( anotherDir ~ PathEnd ) {
redirect(anotherDir + "/", StatusCodes.MovedPermanently )
} ~
pathPrefix(anotherDir) {
path("") {
/* do something else */
}
}
Обратите внимание, что этот вопрос был вдохновлен некоторыми обсуждениями в Как автоматически добавить косую черту в конец URL-адреса в маршрутизации спрея?