我正在从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()。

09-13 03:57