Spring @RequestMapping Ошибка шаблона URI - PullRequest
1 голос
/ 20 февраля 2012

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

@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 запроса выглядит как / имя_проекта / updateUser / app / au / 132

И когда я запустил это приложение в tomcat, первый методникогда не называется.Контроллер всегда использует второй.Но в Spring Framework 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;
}

Кажется, что Spring не может обработать три аннотации @PathVariable в ОДНОМ методе.

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

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

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

/updateUser/**

и

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

будет соответствовать тому же URI: s.

2 голосов
/ 20 февраля 2012

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

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

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

вы найдете, что это вызовет

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...