我认为ControllerClassNameHandlerMapping用于将url映射到控制器(在删除Controller部分之后),但这似乎与我的示例不同。
如果我删除" /导航"从导航控制器映射(见下文)然后我得到404错误。
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean name="navigationController" class="com.mvc.controller.NavigationController">
<property name="methodNameResolver">
<bean class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/navigation/menu">menuHandler</prop>
</props>
</property>
</bean>
</property>
</bean>
在上面的代码片段中,我需要将属性键作为/ navigation / menu传递,但我想如果/ navigation被映射到控制器,那么我可以通过传递/菜单逃脱,否则ControllerClassNameHandlerMapping的意义何在?
我尝试删除ControllerClassNameHandlerMapping但需要它。
有人可以解释一下ControllerClassNameHandlerMapping实际上在做什么吗?
由于
答案 0 :(得分:2)
ControllerClassNameHandlerMapping
正在映射:
/navigation/* -> NavigationController.
如果你删除它,导航控制器永远不会被执行,并且丢失了将网址映射到方法的任何机会。
工作流程为:
DispatcherServlet -> ControllerClassNameHandlerMapping
-> NavigationController -> MethodNameResolver -> method
修改强>
例如,如果要将“menu”直接映射到menuHandler方法,可以使用以下MethodNameResolver
public class LastPathNameMethodResolver extends AbstractUrlMethodNameResolver {
private Properties mappings;
@Override
protected String getHandlerMethodNameForUrlPath(String urlPath) {
return mappings.getProperty(StringUtils.substringAfterLast(urlPath, "/"));
}
public Properties getMappings() {
return mappings;
}
public void setMappings(Properties mappings) {
this.mappings = mappings;
}