【问题标题】:Ordering issue with Spring MVC's PropertiesMethodNameResolverSpring MVC 的 PropertiesMethodNameResolver 的排序问题
【发布时间】:2014-07-21 07:45:13
【问题描述】:

我正在使用 Spring-MVC 的 MultiActionController 和 PropertiesMethodNameResolver 将 URL 映射到我的 Controller 类的 apppriate 方法。要求是将包含特定单词“abc”的所有网址映射到一种方法,将“xyz”映射到第二种方法,依此类推。所有 url 可以是任意长的,因此必须使用正则表达式模式匹配,所有 url 都以相同的扩展名结尾,所有剩余的 url 应该映射到默认方法。因此,我们使用以下内容:

<bean id="paramMultiController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
    <property name="methodNameResolver">
        <ref bean="propsResolver" />
    </property>
    <property name="delegate">
        <ref bean="methodsContainer" />
    </property>
</bean>

<bean id="methodsContainer" class="com.abc.controller.MethodsContainer"/>

<bean id="propsResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
    <property name="mappings">
        <props>
            <prop key="/">defaultMethod</prop>
            <prop key="/**/abc.ext">methodAbc</prop>
            <prop key="/def/**/*.ext">methodDef</prop>
            <prop key="/xyz/**/*.ext">methodXyz</prop>
            <prop key="/**/ijk/**/*.ext">makeIjk</prop>
            <prop key="/**/*.ext">defaultMethod</prop>
        </props>
    </property>
</bean>

这在我们使用 Spring-2.5 之前一直有效,但最近当我们升级到 Spring-4.0 时开始出现问题。我发现问题的原因是 PropertiesMethodNameResolver 从 Spring-2.5 到 Spring-3.0 的代码更改。早期的 PropertiesMethodNameResolver 使用 Iterators 来迭代定义的映射并将其与请求的 URL 进行匹配,但 Spring-3.0 切换到开始使用 Enumerator 并且顺序混乱,导致 url 主要与 defaultMethod 匹配。

您能否提出解决方案。我们希望按照我们在配置文件中定义的顺序处理(匹配)url。请注意,我们不想使用注解,因为我们有太多的 URL 映射,并且使用注解会将 URL 映射传播到许多类,从而难以合并和管理映射。

【问题讨论】:

    标签: spring spring-mvc model-view-controller url-mapping


    【解决方案1】:

    您可以覆盖 PropertiesMethodNameResolver 类的受保护方法 getHandlerMethodNameForUrlPath 并实现所需的行为。

    【讨论】:

    • 感谢 JavaBond,这正是我目前所做的,但想知道是否有更好的解决方案。
    • 很高兴知道它有帮助 :) 为了他人的利益,请接受答案。
    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 2014-05-05
    • 2013-08-21
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多