RequestMapping с несколькими значениями с переменной пути - Spring 3.0

@RequestMapping(value = {"/userDetails", "/userDetails/edit/{id}"}, method = RequestMethod.GET)
public String userDetails(Map Model,****) {
//what goes here? 
}

Какими будут мои аргументы методу userDetails? И как мне различать /userDetails и /userDetails/edit/9 внутри метода?


person Aravind Vel    schedule 09.04.2012    source источник


Ответы (1)


В идеале мы можем получить переменную пути, используя аннотацию @PathVariable в аргументе метода, но здесь вы использовали массив URL-адресов {"/userDetails", "/userDetails/edit/{id}"}, поэтому это приведет к ошибке при запросе на поставку, таком как localhost:8080/domain_name/userDetails, в этом случае идентификатор не будет предоставлен для @PathVariable.

Таким образом, вы можете получить разницу (какой запрос проходит), используя аргумент запроса HttpServletRequest в методе и используя этот объект запроса, как показано ниже:

Строка uri = request.getRequestURI ();

Код такой -

   @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
 }
person kundan bora    schedule 09.04.2012
comment
Я использую метод = RequestMethod.GET и метод = RequestMethod.POST отдельно. В этом случае я не буду передавать HttpServletRequest в качестве аргумента. Есть ли другой выход? - person Aravind Vel; 09.04.2012
comment
почему бы вам не разделить эти два сопоставления запросов на два метода? и если у вас есть какие-либо общие функции для реализации, вы можете поместить этот общий код в отдельный частный метод и соответственно вызвать этот метод. - person kundan bora; 09.04.2012