我使用Spring的MultiActionController和PropertiesMethodNameResolver来映射URL来追加我的Controller类的方法。要求是将包含特定单词'abc‘的所有urls映射到一个方法,将'xyz’映射到第二个方法,以此类推。所有urls都可以是任意性长的,因此必须使用regex模式进行匹配,所有urls都以相同的扩展结束,其余的urls应该映射到默认方法。因此,我们使用以下方法:
<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>这在我们使用Spring2.5之前一直有效,但是最近升级到Spring4.0时出现了问题。我发现问题的原因是PropertiesMethodNameResolver中的代码从Spring2.5更改到Spring3.0。早期的PropertiesMethodNameResolver使用迭代器对定义的映射进行迭代,并将其与请求的URL匹配,但是Spring3.0切换到开始使用枚举器,顺序混乱,导致URL大部分与defaultMethod匹配。
你能给我一个解决办法吗。我们希望在配置文件中按照我们定义的顺序处理(匹配) urls。请注意,我们不想使用注释,因为我们有太多的URL映射,使用注释将URL映射扩展到许多类,这使得合并和管理映射变得困难。
发布于 2014-07-21 10:26:09
您可以重写类getHandlerMethodNameForUrlPath的受保护方法PropertiesMethodNameResolver并实现所需的行为。
https://stackoverflow.com/questions/24859982
复制相似问题