2012-02-19 10 views
1

У меня возник вопрос о шаблоне URI @RequestMapping. Я построил контроллер для обновления сведений о пользователях. И я пишу два метода ниже.spring @RequestMapping Ошибка шаблона URI

@RequestMapping(value="/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}") 
public @ResponseBody Object handleUpdateUserDetailsRequest(@PathVariable String applicationModuleType, 
                  @PathVariable String userCountryCode, 
                  @PathVariable String applicationModuleId, 
                  Model model) { 
    System.out.println("************ form:Submited"); 
    } 
    return null; 
} 

@RequestMapping(value="/updateUser/**") 
public @ResponseBody Object handleRequest(Model model) { 
    System.out.println("************ form:Submited all"); 
    return null; 
} 

И запрос URI, как/project_name/updateUser/приложение/аи/132

И когда я побежал это приложение в котом, то первый метод никогда не вызывается. Контроллер всегда использует второй. Но в весеннем документе doc он сказал: «Метод может иметь любое количество аннотаций @PathVariable».

Итак, я не могу понять, почему у меня нет трех аннотаций @PathVariable в методе.

Другое дело, если изменить первый метод @RequestMapping аннотации, как показано ниже, его можно вызвать.

@RequestMapping(value="/updateUser/app/{userCountryCode}/{applicationModuleId}") 
public @ResponseBody Object handleUpdateUserDetailsRequest(@PathVariable String userCountryCode, 
                  @PathVariable String applicationModuleId, 
                  Model model) { 
    System.out.println("************ form:Submited"); 
    } 
    return null; 
} 

Похоже, что весна не может обрабатывать три аннотации @PathVariable в методе ONE.

Есть ли кто-нибудь, кто может сказать мне, почему и где я ошибся, пожалуйста?

Заранее благодарен!

ответ

2

Когда три @PathVariable аннотаций Spring будет думать @RequestMapping (значение = "/ updateUser/**") матч более чем/updateUser/{applicationModuleType}/{userCountryCode}/{} applicationModuleId

Если вы удалить

@RequestMapping(value="/updateUser/**") 

вы нашли это будет вызывать

@RequestMapping(value="/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}") 

вы должны с помощью @RequestParam для передачи параметров. не @PathVariable.

3

Ничего общего с переменными пути, у вас просто конфликтующие сопоставления.

/updateUser/** 

и

/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId} 

будет соответствовать один и тот же URI: с.