Spring MVC ParameterMethodNameResolver example

ParameterMethodNameResolver, a MultiActionController method name resolver to map URL to method name via request parameter name, and the parameter name is customizable through the “paramName” property. See following example :

1. MultiActionController

A MultiActionController example.


package com.mkyong.common.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class CustomerController extends MultiActionController{
	
	public ModelAndView add(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		
		return new ModelAndView("CustomerPage", "msg","add() method");
			
	}
	
	public ModelAndView delete(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
			
		return new ModelAndView("CustomerPage", "msg","delete() method");
				
	}
	
	public ModelAndView update(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
			
		return new ModelAndView("CustomerPage", "msg","update() method");
				
	}
	
	public ModelAndView list(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
				
		return new ModelAndView("CustomerPage", "msg","list() method");
					
	}
	
}

2. ParameterMethodNameResolver

With ParameterMethodNameResolver configured, and define the parameter name thought the “paramName” property:


<beans ...>

 <bean 
  class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
    
  <bean class="com.mkyong.common.controller.CustomerController">
     <property name="methodNameResolver">
	<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
	   <property name="paramName" value="action"/>
	</bean>
     </property>
   </bean>

</beans>

Now, the URL will map to the method name via the “action” request parameter name :

  1. /customer/*.htm?action=add –> add() method
  2. /customer/whatever.htm?action=add –> add() method
  3. /customer/*.htm?action=update –> update() method
  4. /customer/*.htm?action=delete –> delete() method
  5. /customer/*.htm?action=list –> list() method

P.S the “*” means any text.

Note
By default, MultiActionController is used the InternalPathMethodNameResolver to map URL to the corresponds method name.

Download Source Code

Reference

  1. ParameterMethodNameResolver Javadoc
  2. Spring MVC MultiActionController example

3 comments on “Spring MVC ParameterMethodNameResolver example

  1. Hi Mkyong,

    I have a Question, I have X login page pointing to one LDAP enabled AD, now i want to redirect that X login page to another LDAP enabled AD? How can we do this?

    Reply
  2. Hi Mkyong!

    I am getting error when I am trying to build this application. I am using netbeans and throws an error..

    Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property ‘methodNameResolver’ of bean class [controller.CustomerController]: Bean property ‘methodNameResolver’ is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:921)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)
    … 21 more

    Thanks!
    Shrikanth

    Reply
    1. Hi,

      is your CustomerController extending MultiActionController?

      Reply

Leave a Comment

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