2016-01-12 41 views
7

我注意到了Spark Framework中的一些東西。它不匹配映射路線的尾部斜線。所以它認爲/ api/test和/ api/test /是不同的URI。Spark Framework:匹配有或沒有尾部斜槓

這很好,如果有一種方法將它們通配在一起,但似乎沒有。我錯過了什麼?

我想這條路線:

Spark.get("/api/test", (req, res) -> { 
      return "TEST OK"; 
     }); 

要匹配/ API /測試或/ API /測試/。既然這樣,它只匹配/ API /測試,如果我切換到:

Spark.get("/api/test/", (req, res) -> { 
      return "TEST OK"; 
     }); 

它只匹配/api/test/

+0

我對火花一無所知......但如果URI是一個正則表達式,那麼你可以在最後一個**/**之後添加一個**?**。 – Augusto

回答

6

你可以設置一個過濾器重定向,如:

Spark.before((req, res) -> { 
    String path = req.pathInfo(); 
    if (path.endsWith("/")) 
     res.redirect(path.substring(0, path.length() - 1)); 
}); 

這可能比映射重複路由更好。

+0

更好的選擇 – mtyson

4

這似乎是在2013年之前問過,但封閉的(我認爲不是實現)2015年:

https://github.com/perwendel/spark/issues/97

路線應該匹配與不斜線#97

jsnoriegam年08月31打開此問題,2013

ryber加入提交到ryber /火花所引用年10月14此問題,2013

醉意添加的功能要求11月22標籤,2015

perwendel關閉這個在2015年11月23日

有由ryber拉請求與修復此問題:

https://github.com/ryber/spark/commit/556597e679dc224719188f8d27d8ba10e58fd8bb

然而,這似乎並不爲當前SimpleRouteMatcher類的一部分:

https://github.com/perwendel/spark/blob/ded78b7fa9b78749c0d5f6776bba9c9cd3cfb6fb/src/main/java/spark/route/SimpleRouteMatcher.java

+0

我想我必須映射每條路線都有和沒有尾隨斜線。的Bleh。 – mtyson

+0

或者跳入Spark代碼並提出另一個拉取請求,但不清楚它是否會被接受。無論如何,祝你好運。 –

+0

我認爲通常(例如Sinatra?)將允許使用正則表達式,因此您可以用'/?'結尾。這可能很好。 – Max