RequestMapping with multiple values with pathvariable - Spring 3.0

Aravind Vel picture Aravind Vel · Apr 9, 2012 · Viewed 41.3k times · Source
@RequestMapping(value = {"/userDetails", "/userDetails/edit/{id}"}, method = RequestMethod.GET)
public String userDetails(Map Model,****) {
//what goes here? 
}

What will be my arguments to the userDetails method? And how do I differentiate /userDetails and /userDetails/edit/9 within the method?

Answer

kundan bora picture kundan bora · Apr 9, 2012

Ideally we can get pathvariable by using annotation @PathVariable in method argument but here you have used array of url {"/userDetails", "/userDetails/edit/{id}"} so this will give error while supply request like localhost:8080/domain_name/userDetails , in this case no id will be supplied to @PathVariable.

So you can get the difference (which request is comming through) by using argument HttpServletRequest request in method and use this request object as below -

String uri = request.getRequestURI();

Code is like this -

   @RequestMapping(value = {"/userDetails", "/userDetails/edit/{id}"}, method=RequestMethod.GET)
   public String userDetails(Map Model,HttpServletRequest request) {
   String uri = request.getRequestURI();  
  //put the condition based on uri
 }