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.
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 :
- /customer/add.htm –> add() method
- /customer/delete.htm –> delete() method
- /customer/update.htm –> update() method
- /customer/list.htm –> list() method
Note
In Spring MVC, this
In Spring MVC, this
@RequestMapping
is always the most flexible and easy to use mapping mechanism.
Download Source Code
Download it – SpringMVC-MultiActionController-Annotation-Example.zip (7KB)
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”);
}
Very helpful!
Thanks
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!
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!
How configure Servlet Xml in multiaction controller
how call multiple methods in multiaction controller
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. : )
thanks for your extra inputs.
Hey Pretty cool approach, very easy to implement and maintain.
Thanks a lot =)
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?
Cant think any of use case with same URL but map to different mapping. In Spring MVC, the mapping goes on @Controller 1st, then only @RequestMapping.
Do you have use case for it?