我正在从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是否处理两个网址,即/splitters/habuma
和/username/habuma
或/spitters/username/habuma
?
答案 0 :(得分:1)
如果类级/username
(您的问题中未显示)仅为@RequestMapping
,则没有@RequestMapping("/spitter")
路径组件。书中可能有一个拼写错误。正确的判决是:
例如,如果请求路径为 / spitter / habuma ,则habuma将传入showSpitterProfile()以获取用户名。