Spring MVC - @RequestMapping GET和POST @RequestMethod

时间:2016-04-14 16:04:23

标签: spring spring-mvc

我理解之前已经问过这个问题,我正在学习 Spring 跟随 Spring Petclinic示例项目 processCreationForm 没有问题,当使用 GET showOwner 进行重定向时,它按预期工作,但是当我使用<实验它时strong> POST 它会抛出 HTTP状态405 - 请求方法'GET'不受支持。是因为 processCreationForm 正在重定向到 showOwner 我无法将其作为POST请求获取?

@RequestMapping(value = "/owners/new", method = RequestMethod.POST)
public String processCreationForm(@Valid Owner owner,
            BindingResult result) {
    if(result.hasErrors()) {
        return "owners/ownerForm";
    } else {
        this.clinicService.saveOwner(owner);
        return "redirect:/owners/" + owner.getId();
    }
}

@RequestMapping(value = "/owners/{ownerId}", method = RequestMethod.POST)
public ModelAndView showOwner(@PathVariable("ownerId") int ownerId) {
    ModelAndView mav = new ModelAndView("owners/ownerDetails");
    mav.addObject(this.clinicService.findOwnerById(ownerId));
    return mav;
}

赞赏任何有用的评论。

1 个答案:

答案 0 :(得分:1)

您正在重定向到/owners/{ownerId}网址,但您没有为该端点定义GET处理程序,因此Spring MVC抱怨:

  

HTTP状态405 - 不支持请求方法“GET”。

使用RequestMethod.GET可以解决您的问题:

@RequestMapping(value = "/owners/{ownerId}", method = RequestMethod.GET)
public ModelAndView showOwner(@PathVariable("ownerId") int ownerId) { ... }
  

是因为processCreationForm正在重定向到showOwner I   我无法将其作为POST请求获取?

由于POST上的/owners/new处理程序正在重定向到/owners/{ownerId},因此并不意味着重定向将是POST请求。重定向始终是GET次请求。