Spring MVC – ControllerClassNameHandlerMapping example
ControllerClassNameHandlerMapping is a handler mapping class, which use convention to maps the requested URL to Controller (convention over configuration). It takes the Class name, remove the ‘Controller’ suffix if it exists and return the remaining text, lower-cased and with a leading “/”.
ControllerClassNameHandlerMapping example
Few examples to demonstrate the use of the ControllerClassNameHandlerMapping class.
1. Before and After
By default, Spring MVC is using the BeanNameUrlHandlerMapping handler mapping.
<beans ...> <bean name="/welcome.htm" class="com.mkyong.common.controller.WelcomeController" /> <bean name="/helloGuest.htm" class="com.mkyong.common.controller.HelloGuestController" /> </beans>
To enable the ControllerClassNameHandlerMapping, declared it in the bean configuration file, and the controller’s bean’s name is no longer required.
<beans ...> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" /> <bean class="com.mkyong.common.controller.WelcomeController" /> <bean class="com.mkyong.common.controller.HelloGuestController" /> </beans>
Now, the application is mapping the requested URL by the following conventions.
WelcomeController -> /welcome* HelloGuestController -> /helloguest*
- /welcome.htm –> WelcomeController.
- /welcomeHome.htm –> WelcomeController.
- /helloguest.htm –> HelloGuestController.
- /helloguest12345.htm –> HelloGuestController.
- /helloGuest.htm, failed to map /helloguest*, the “g” case is not match.
2. Case sensitive
To solve the case sensitive issue stated above, declared the “caseSensitive” property and set it to true.
<beans ...> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" > <property name="caseSensitive" value="true" /> </bean> <bean class="com.mkyong.common.controller.WelcomeController" /> <bean class="com.mkyong.common.controller.HelloGuestController" /> </beans>
Now, the application is mapping the requested URL by the following conventions.
WelcomeController -> /welcome* HelloGuestController -> /helloGuest*
- /helloGuest.htm –> HelloGuestController.
- /helloguest.htm, failed to map “/helloGuest*”, the “G” case is not match.
3. pathPrefix
Additionally, you can specify a prefix to maps the requested URL, declared a “pathPrefix” property.
<beans ...> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" > <property name="caseSensitive" value="true" /> <property name="pathPrefix" value="/customer" /> </bean> <bean class="com.mkyong.common.controller.WelcomeController" /> <bean class="com.mkyong.common.controller.HelloGuestController" /> </beans>
Now, the application is mapping the requested URL by the following conventions.
WelcomeController -> /customer/welcome* HelloGuestController -> /customer/helloGuest*
- /customer/welcome.htm –> WelcomeController.
- /customer/helloGuest.htm –> HelloGuestController.
- /welcome.htm, failed.
- /helloGuest.htm, failed.
Reference
- Java Core Technology - Java RegEx, Java XML, Java I/O, Java Misc
- J2EE Frameworks - Hibernate, Spring 2.5, Spring MVC, Struts 1.x, Struts 2.x
- Build Tools - Maven, Archiva
- Unit Test - jUnit, TestNG
- Client Scripts - jQuery
[...] ControllerClassNameHandlerMapping example [...]
[...] you may mix use of multiple handler mappings strategy in Spring MVC development. For example, use ControllerClassNameHandlerMapping to map all the convention handler mappings, and SimpleUrlHandlerMapping to map other special [...]