Spring MVC ControllerClassNameHandlerMapping example

In Spring MVC, ControllerClassNameHandlerMapping use convention to map requested URL to Controller (convention over configuration). It takes the Class name, remove the ‘Controller’ suffix if exists and return the remaining text, lower-cased and with a leading “/”.

See following few examples to demonstrate the use of this 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 now 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, Spring MVC is mapping the requested URL by following conventions :


WelcomeController -> /welcome*
HelloGuestController -> /helloguest*
  1. /welcome.htm –> WelcomeController.
  2. /welcomeHome.htm –> WelcomeController.
  3. /helloguest.htm –> HelloGuestController.
  4. /helloguest12345.htm –> HelloGuestController.
  5. /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, Spring MVC is mapping the requested URL by the following conventions :


WelcomeController -> /welcome*
HelloGuestController -> /helloGuest*
  1. /helloGuest.htm –> HelloGuestController.
  2. /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, Spring MVC is mapping the requested URL by the following conventions :


WelcomeController -> /customer/welcome*
HelloGuestController -> /customer/helloGuest*
  1. /customer/welcome.htm –> WelcomeController.
  2. /customer/helloGuest.htm –> HelloGuestController.
  3. /welcome.htm, failed.
  4. /helloGuest.htm, failed.

Download Source Code

Reference

  1. ControllerClassNameHandlerMapping javadoc

17 comments on “Spring MVC ControllerClassNameHandlerMapping example

  1. After Spring 5 we have this Class Depreceated. What’s the replacement for this class ?

    Reply
  2. How can I get like this:

    WelcomeController -> /welcome*
    WelcomeController -> /welcome/

    Reply
  3. Hi Folks,

    Unlike mentioned in the example, I wrote my controller without extending AbstractController explicitly. I just registered my controller bean with the xml.
    When I requested for the page, it dint work owing for Handler Mapping not found.
    When I rewrote the controller extending the AbstractController its working fine!!!
    Any thoughts??

    Reply
  4. Hi
    make a correction with ‘caseSensitive’ the value should be ‘false’ to ignore the case the request ‘helloguest.htm’ or ‘helloGuest.htm’ will be mapped to HelloGuestController

    Reply
  5. Hi,
    You are just awesome dear. Your Examples are worth praising.
    You really keep a beginers in mind while publishing these tutorials.
    Thanks …

    Reply
  6. Hi, thanks very much for the tutorial. Is there any chance you could give me two more examples of convention over configuration? I’m badly stuck!

    Reply
  7. Can I mix BeanNameUrlHandlerMapping with SimpleUrlHandlerMapping or ControllerClassNameHandlerMapping ? Thanks in advance.

    Reply
  8. What is the difference between BeanNameUrlhandlerMapping and ControllerClassNameHandlerMapping?

    Reply
  9. Ran the code, couldn’t get it to work.

    Tried the following urls:

    http://localhost:8080/SpringMVC/customer/welcome.htm
    and
    http://localhost:8080/SpringMVC/customer/Welcome.htm

    Got the following error:
    HTTP Status 404 – /SpringMVC/customer/welcome.htm

    type Status report

    message /SpringMVC/customer/welcome.htm

    description The requested resource (/SpringMVC/customer/welcome.htm) is not available.

    Apache Tomcat/7.0.26

    Reply
    1. checkout ur web.xml file url pattern if it is correct thn see ur handlerMapping configuration

      applicationViewController
      applicationViewController

      Reply

Leave a Comment

Your email address will not be published. Required fields are marked *