天天看點

SpringMVC中用@ParamVariable傳遞的參數包含斜杠(/)時,比對不了報404錯誤的解決方案

背景代碼是這樣的:

按理說這樣就行了,各大浏覽器也正常執行了。

但是,一不下心發現,隻要URL中出現“ 充 ”這個漢字,直接就報404錯誤

例如這樣:

奇葩吧。

經過漫長的調查發現,原因 有可能 是:

充 這個漢字在URL中直接送出,經過浏覽器轉碼後,會變成一串包含“ / ”的“亂碼”。

後來經過類似測試發現,果然隻要URL中包含“ / ”的參數,都無法通過@PathVariable 正确比對。

有人說不如改成這樣:

方案1:

在Server端通過urlencode把漢字先進行UTF-8編碼,然後扔到前端。

但是這樣做的話,URL就會變成這個醜樣,這和亂碼有什麼差別?真心不喜歡。

還有人說可以這樣

方案2:

然後在Controller中用 @RequestParam 來接收參數,這樣确實是可以的。

但是SEO大神說,url中包含?的動态參數後,有可能會被蜘蛛重複抓取,不利于SEO。

難道就沒有辦法在保持URL格式與漢字都不變的情況,實作這個功能嗎?

最後終于發現,有人這樣搞定了!

前端:

後端:

搞完之後,不管你輸入什麼樣的URL,都能進入到指定的方法!