1
我有,我想在多個方案中重用的路線片段:我在哪裏可以指定dirSegment
val的值如何創建自定義指令來重用路由?
val dirSegment = "licenses"
path(dirSegment ~ PathEnd) {
redirect(dirSegment + "/", StatusCodes.MovedPermanently)
} ~
pathPrefix(dirSegment) {
path("") {
/* do something */
}
}
我想轉這一個指令(或參數化路線?)和代替path("") { /* do something */ }
白色固定的重定向行爲,尋找類似下面的任意進一步路由/代碼:
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 */
}
}
注意,這個問題是由一些討論中How do I automatically add slash to end of a url in spray routing?
我們在RC1中改變了一下PathMatcher行爲,並且在最終版本發佈之前可能會再做一次。從RC1開始,有'rawPathPrefix'完全匹配而不接受任何可選的結尾斜線。有了這個,你應該可以編寫'rawPathPrefix(Slash〜segment〜PathEnd)'來匹配沒有斜槓。否則,這看起來不錯。 – jrudolph
@jrudolph,除非PathEnd已經改變,是不是還會匹配一個可選的結尾斜槓?我記得嘗試各種方法(可能'rawPathPrefix'),並有重定向循環的問題,直到我寫我自己的'PathEndNoSlash'。 – Andy
下面是我今天下午寫的遷移指南中的PR,它有望解釋新的行爲:https://github.com/spray/spray/pull/659/files – jrudolph