Main Tutorials

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 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
11 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Younis Irshad
8 years ago

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
10 years ago

Very helpful!
Thanks

abdou
10 years ago

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
10 years ago

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!

Narasimharao
12 years ago

How configure Servlet Xml in multiaction controller

Narasimharao
12 years ago

how call multiple methods in multiaction controller

ahmed
12 years ago

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
13 years ago

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

Thanks a lot =)

Andy
13 years ago

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?