我們目前正在Play 2.5.x上工作播放框架路由不區分大小寫
我們希望實現不區分大小寫的路由。例如說
GET /經/ V1 /組織http.organizationApi()
在URL我們想才達到
http://localhost:9000/abc/v1/organizations
http://localhost:9000/ABC/V1/OrganIZations
是否使用正則表達式來實現此bu的一種方法?有人能指出一個例子嗎?
我們目前正在Play 2.5.x上工作播放框架路由不區分大小寫
我們希望實現不區分大小寫的路由。例如說
GET /經/ V1 /組織http.organizationApi()
在URL我們想才達到
http://localhost:9000/abc/v1/organizations
http://localhost:9000/ABC/V1/OrganIZations
是否使用正則表達式來實現此bu的一種方法?有人能指出一個例子嗎?
您可以定義請求處理程序以使URL不區分大小寫。在這種情況下,下面的處理程序將只是URL轉換爲小寫,所以在你的路由的網址應該以小寫定義:
import javax.inject.Inject
import play.api.http._
import play.api.mvc.RequestHeader
import play.api.routing.Router
class MyReqHandler @Inject() (router: Router, errorHandler: HttpErrorHandler,
configuration: HttpConfiguration, filters: HttpFilters
) extends DefaultHttpRequestHandler(router, errorHandler, configuration, filters) {
override def routeRequest(request: RequestHeader) = {
val newpath = request.path.toLowerCase
val copyReq = request.copy(path = newpath)
router.handlerFor(copyReq)
}
}
而且在application.conf
參考它使用:
# This supposes MyReqHandler.scala is in your project app folder
# If it is in another place reference it using the correct package name
# ex: app/handlers/MyReqHandler.scala --> "handlers.MyReqHandler"
play.http.requestHandler = "MyReqHandler"
現在,如果你有一個路線定義爲「/人/製造」,任何情況下,組合將工作(例如:「/人/創建」)
有,雖然兩個警告:
你只能在Scala動作中使用它。如果你的路由文件引用一個Java控制器的方法,你會得到一個奇怪的例外:
[error] p.c.s.n.PlayRequestHandler - Exception caught in Netty
scala.MatchError: Right((play.core.routing.[email protected]22d56da6,[email protected])) (of class scala.util.Right)
如果您遇到這種情況,你可以找到更多信息here
如果您的網址有參數,這些也將是轉化。舉例來說,如果你有這樣
GET /persons/:name/greet ctrl.Persons.greet(name: String)
呼叫路由到「/人/ JOHNDOE /打招呼」將轉化爲「/人/人johndoe /打招呼」,和你的greet
方法會收到「爲johndoe」而不是「JohnDoe」作爲參數。請注意,這不適用於查詢字符串參數。 根據您的使用情況,這可能會有問題。
http://stackoverflow.com/questions/22015902/play-framework-2-2-1-case-insensitive-routing – MipH
@MipH看到帖子較早。我正在尋找一些正則表達式來處理這個問題。可能是我可以提出我究竟需要什麼的問題。謝謝 – Prakash
我想你可能有興趣閱讀:https://jazzy.id.au/2013/05/08/advanced_routing_in_play_framework.html –