2011-09-13 46 views
3

我已經在Google和stackoverflow上找到了這個答案,但不幸的是,所提供的解決方案要麼假設很多關於Spring MVC和Java的知識,要麼是關於註釋的大小寫敏感性。Spring MVC不區分大小寫的網址

因此,我不知道如何適應這些解決方案,以適應我自己的問題,因此這個新的問題的原因。

我想要做的事聽起來很簡單。 我有一個dispatcher-servlet.xml文件,XML以下塊是:

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="*.htm">pageController</prop> 
       <prop key="*.html">pageController</prop> 
       <prop key="/cms/*">pageController</prop> 
       <prop key="/admin/*">adminController</prop> 
      </props> 
     </property> 
    </bean> 

我想/cms/*/admin/*鍵是不區分大小寫,但作爲新的與Java和Spring MVC的,我不明白怎麼我應該去做這件事。

例如,即使有人輸入了/CMS//Cms/,我也希望它使用pageController,而目前它只顯示一個404頁面。

任何人都可以向我解釋我需要做什麼才能達到我想要的結果嗎?

任何幫助將不勝感激!

編輯:

Rupok的答案我添加了一個類來擴展AntPathMatcher

不幸的是,我不知道如何「重新設置SimpleUrlHandlerMapping」。

有人能指點我正確的方向嗎?

+0

在您的調度員servlet.xml中的 pageController的PageController<丙鍵=」/ CMS/* 「>的PageController<丙鍵=」/管理/ * 「> adminController<屬性名=」 的PathMatcher 「> Rupok

回答

5

SimpleUrlHandlerMapping的默認匹配機制是AntPathMatcher。您可以創建自己的PathMatcher實現或創建AntPathMatcher的子類,並將其設置回SimpleUrlHandlerMapping。

PathMatcher接口相當簡單易行。

public class CaseInsensitiveAntPathMatcher extends AntPathMatcher { 

@Override 
public boolean match(String pattern, String string) { 
    return super.match(pattern.toLowerCase(), string.toLowerCase()); // make this according to your need 
} 

}

+0

謝謝您的回答! 我現在開始瞭解更多,但我該如何「在SimpleUrlHandlerMapping上重新設置」? –

+0

<豆ID = 「urlMapping中」 類= 「org.springframework.web.servlet.handler.SimpleUrlHandlerMapping」> <屬性名= 「映射」> <丙鍵= 「*。HTM」>的PageController <丙鍵= 「*。HTML」>的PageController <丙鍵= 「/ CMS/*」>的PageController <丙鍵= 「/管理/ *」> adminController <屬性名= 「pathMatcher」> Rupok

0

Rupok的回答讓我開始在正確的方向,但我需要改變實現一點點地得到它的工作。

public class CaseInsensitiveAntPathMatcher extends AntPathMatcher { 
    @Override 
    protected boolean doMatch(String pattern, String path, boolean fullMatch, Map<String, String> uriTemplateVariables) { 
     return super.doMatch(pattern.toLowerCase(), path.toLowerCase(), fullMatch, uriTemplateVariables); 
    } 
} 

match(String,String)和sever其他方法委託給doMatch(String,String,boolean,Map)。

而且,由於我使用的是org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping我需要在我的新的匹配堵塞這樣

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="order" value="0" /> 
    <property name="pathMatcher"> 
     <bean class="youpackage.CaseInsensitiveAntPathMatcher" /> 
    </property> 
</bean>