Main Tutorials

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

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
17 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Biyyam
1 month ago

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

Kunal Rana
8 years ago

thanks for the crystal clear code

Younis Irshad
8 years ago

ERROR: WARNING: No mapping found for HTTP request with URI [/SpringMVC/helloGuest.htm] in DispatcherServlet with name ‘mvc-dispatcher’

BUG FIXED BY: try this URL http://localhost:8080/SpringMVC/customer/welcome.htm

Vi?t Phan
9 years ago

How can I get like this:

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

Ramkishan
9 years ago

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??

Rajanikanth
9 years ago

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

Sushant Jain
10 years ago

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

Praveen
10 years ago
Eoin
11 years ago

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!

Basappayya
11 years ago

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

venkat
11 years ago

What is the difference between BeanNameUrlhandlerMapping and ControllerClassNameHandlerMapping?

Anusha
11 years ago

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

Sushant
6 years ago
Reply to  Anusha

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

applicationViewController
applicationViewController

Rock
12 years ago

Hi i did the way you have put the code and run the code in Tomcat. Tried to access the app with this
http://localhost:8080/SpringMVC/Welcome.htm. Getting 404 error. tried
http://localhost:8080/SpringMVC/pages/Welcome.htm still getting 404 error.

Can you help?

Richard
12 years ago
Reply to  Rock

Is there a more detailed error message?

Karuna
10 years ago
Reply to  Richard
Karuna
10 years ago
Reply to  Karuna

Sorry please ignore the above URL..its
http://localhost:8080/SpringMVC/welcome.htm