在我的 Play 应用程序中,当我使用反向路由生成链接时,参数中的正斜杠被转义了,我希望它们没有被转义。
例如:
<a href="@{Application.page('about/contact')}">Contact Us</a>
生成一个工作链接,但会将您带到 /about%2Fcontact.html
而不是 /about/contact.html
。 (在地址栏中输入 /about/contact.html
也会转到正确的位置。)
我这样做是因为我只有几个页面可以做任何有趣的事情,其余的基本上是静态的——它们只使用基本的模板特性(extends
,include
,获取
,设置
)。由于为它们中的每一个创建单独的 Controller 和操作会有点矫枉过正,所以我设置了一个操作来处理所有它们。
public class Application extends Controller {
public static void page(String path) {
render("/static/" + path + ".html");
}
}
用一条路线处理:
GET /{<.+>path}.html Application.page
知道如何更改周围的内容以便不对斜杠进行编码吗?
最佳答案
由于我们(显然)无法覆盖 RouteArgs 的工作方式,我们可以在方法中解码给定的 url,如下所示:
public class Application extends Controller {
public static void page(String path) {
render("/static/" + URLDecoder.decode(path, "UTF-8"); + ".html");
}
}
但要注意安全风险! (好吧,.html 没那么多,但以防万一……)
关于java - 防止在反向路由中转义斜线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665677/