Spring MVC MultiActionController annotation example

In this tutorial, we show you how to develop a Spring MVC annotation-based MultiActionController, by using @RequestMapping.

In XML-based MultiActionController, you have to configure the method name resolver (InternalPathMethodNameResolver, PropertiesMethodNameResolver or ParameterMethodNameResolver) to map the URL to a particular method name. But, life is more easier with annotation support, now you can use @RequestMapping annotation as a method name resolver, which used to map URL to a particular method.

Note
This annotation-based example is converted from the last Spring MVC MultiActionController XML-based example. So, please compare and spots the different.

To configure it, define @RequestMapping with mapping URL above the method name.


package com.mkyong.common.controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class CustomerController{
 
	@RequestMapping("/customer/add.htm")
	public ModelAndView add(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
 
		return new ModelAndView("CustomerAddView");
 
	}
 
	@RequestMapping("/customer/delete.htm")
	public ModelAndView delete(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
 
		return new ModelAndView("CustomerDeleteView");
 
	}
 
	@RequestMapping("/customer/update.htm")
	public ModelAndView update(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
 
		return new ModelAndView("CustomerUpdateView");
 
	}
 
	@RequestMapping("/customer/list.htm")
	public ModelAndView list(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
 
		return new ModelAndView("CustomerListView");
 
	}
}

Now, the URL will map to the method name in the following patterns :

  1. /customer/add.htm –> add() method
  2. /customer/delete.htm –> delete() method
  3. /customer/update.htm –> update() method
  4. /customer/list.htm –> list() method
Note
In Spring MVC, this @RequestMapping is always the most flexible and easy to use mapping mechanism.

Download Source Code

About the Author

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

Comments

avatar
12 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
8 Comment authors
Younis IrshadSaharabdouSpring MVC hello world annotation exampleNarasimharao Recent comment authors
newest oldest most voted
Younis Irshad
Guest
Younis Irshad

WRONG MAPPING:

BUG: WARNING: No request handling method with name ‘add’ in class [com.mkyong.common.controller.CustomerController]

FIXED BY:
@RequestMapping(“/customer/testaddCustomer.htm”)
public ModelAndView testaddCustomer(HttpServletRequest request,HttpServletResponse response) throws Exception {
return new ModelAndView(“CustomerPage”);
}

Sahar
Guest
Sahar

Very helpful!
Thanks

abdou
Guest
abdou

I used this:

@Controller
public class CostumerController {

@Autowired
CustomerServices customerServices;

@RequestMapping(value=”/index”)
public String pageCustomers(Model model){
//traitement
model.addAttribute(“listCustomers”,customersServices.getAllCustomers());
return “customers”; // /prefix/customers.suffix view resolver!
}

spring configuration:

I want to use another controller for example “ProductController” in the same project how to proceed ?

Thank you in advance!

abdou
Guest
abdou

I used this:

@Controller
public class CostumerController {

@Autowired
CustomerServices customerServices;

@RequestMapping(value=”/index”)
public String pageCustomers(Model model){
//traitement
model.addAttribute(“listCustomers”,customersServices.getAllCustomers());
return “customers”; // /prefix/customers.suffix view resolver!
}

spring configuration:

I want to use another controller for example “ProductController” in the same project how to proceed ?

Thank you in advance!

trackback
Spring MVC hello world annotation example

[…] the @RequestMapping is applied at class level (can apply at method level with multi-actions controller), it required to put a RequestMethod to indicate which method to handle the mapping […]

Narasimharao
Guest
Narasimharao

How configure Servlet Xml in multiaction controller

Narasimharao
Guest
Narasimharao

how call multiple methods in multiaction controller

trackback
Spring MVC form handling annotation example

[…] 2.5Spring MVC form handling example – XML versionSpring MVC hello world annotation exampleSpring MVC MultiActionController annotation example […]

ahmed
Guest
ahmed

Good example, but you can simplify url annotations by adding a RequestMapping(“/customer/”) at class level and just write RequestMapping(“add.htm”) at method level. : )

Giovanni Sosa
Guest
Giovanni Sosa

Hey Pretty cool approach, very easy to implement and maintain.

Thanks a lot =)

Andy
Guest
Andy

This is good example. I have a question though, what if I have one more controller which maps
@RequestMapping(“/customer/add.htm”)
public ModelAndView add(HttpServletRequest request,
HttpServletResponse response) throws Exception {

return new ModelAndView(“CustomerAddView”);

}
where is the mapping which is kept to make sure tht this is the controller where you need to search for appropriate mapping?

trackback
Spring MVC MultiActionController example

[…] Note With annotation, the MultiActionController is more easy to configure, visit this MultiActionController annotation example for […]