我正在从Spring in Action 3rd Edition学习Spring MVC,并遇到了路径变量的用法。根据书中给出的示例,我尚不清楚它是如何工作的,请在这里帮助我理解概念:
@RequestMapping(method=RequestMethod.POST)
public String addSpitterFromForm(@Valid Spitter spitter, BindingResult bindingResult) {
if(bindingResult.hasErrors()){
return"spitters/edit";
}
spitterService.saveSpitter(spitter);
return "redirect:/spitters/" + spitter.getUsername();
}
至于重定向到的路径,将采用
/spitters/{username}
的形式,其中{username}
代表刚刚提交的Spitter的用户名。例如,如果用户以habuma的名义注册,那么在提交表单后,他们将被重定向到/spitters/habuma
。在上面的语句中,它说请求被重定向到
/spitters/habuma
,其中habuma
是用户名。@RequestMapping(value="/{username}",method=RequestMethod.GET)
public String showSpitterProfile(@PathVariable String username, Model model){
model.addAttribute(spitterService.getSpitter(username));
return "spitters/view";
}
例如,如果请求路径为
/username/habuma
,则habuma
将传递给showSpitterProfile()
作为用户名。这里说s
howSpitterProfile()
方法处理对/username/habuma
的请求,这与前面提到的语句矛盾。看起来第一条语句本身是正确的,但是请告诉我showSpitterProfile方法是否同时处理URL,即
/splitters/habuma
和/username/habuma
或/spitters/username/habuma
? 最佳答案
如果类级别的/username
(在您的问题中未显示)仅为@RequestMapping
,则没有@RequestMapping("/spitter")
路径组件。书中可能有错字。正确的句子是:
例如,如果请求路径为/ spitter / habuma,则habuma将传递给用户名的showSpitterProfile()。