java - Spring MVC 不区分大小写的 URL

标签 java spring url case-insensitive

我已经在 Google 和 stackoverflow 上寻找了这个问题的答案,但不幸的是,所提供的解决方案要么假设了很多关于 Spring MVC 和 Java 的先验知识,要么是关于不区分大小写的注释。

因此,我不确定如何使这些解决方案适应我自己的问题,因此提出了这个新问题。

我想做的事听起来很简单。 我有一个 dispatcher-servlet.xml 文件,其中包含以下 XML block :

<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”。

有人能给我指出正确的方向吗?

最佳答案

SimpleUrlHandlerMapping 的默认匹配机制是 AntPathMatcher。您可以创建自己的 PathMatcher 实现或继承 AntPathMatcher 并将其设置回 SimpleUrlHandlerMapping。

PathMatcher 接口(interface)实现起来相当简单。

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
  }
}

在配置中它看起来像这样:

<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>
<property name="pathMatcher">
    <bean class="packagename.CaseInsensitiveAntPathMatcher"/>
</property>
<property name="alwaysUseFullPath" value="true"/>

关于java - Spring MVC 不区分大小写的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7397301/

相关文章:

java - 从 Java 程序启动命令行程序并与之交互

java - 如何使用 Spring Batch 并行步骤分割流配置上述用例?

java - 任何可读的、有效的 Flex+BlazeDS+Spring+GAE(在 GAE 数据存储中存储多个表)教程?

c# - 使用正则表达式提取组并在一行中构建 URL

java - 在 firebase 动态链接中传递参数不起作用

java - 为什么 Url.OpenConnection() 返回 SoapHttpUrlConnection?

java - 使用 Gremlin GraphFactory 连接到 AWS Neptune

java - 这段代码中的每个元素 ("(.)\\1{1,}", "$1") 是做什么的?

java - Spring Boot 数据插入一行,其中包含已保存到数据库的数据

java - 建议 bean 中的 Spring Integration "onSuccessExpression"语法