Spring MVC“转发”不适用于同一URI的@PostMapping和@GetMapping批注

时间:2020-04-17 00:50:01

标签: java spring spring-mvc spring-annotations

我已将@PostMapping和@GetMapping用于/ login端点,如下所示,

对于/ login页面,验证失败后,如果我转发到同一/ login页面并显示错误消息,则该页面无法正常工作,并抛出405状态的方法不支持的错误。

当我先切换@PostMapping然后切换@GetMapping时,/ login页面本身未加载(请参阅“之前”部分)。

我已使用常规的RequestMapping参数(转发和常规登录)修复了此问题,但想更多地了解这些批注的内部机制及其工作原理。

之前:

@GetMapping(value = "/login")
@PostMapping(value = "/login")
public ModelAndView getLoginPage() {
    ModelAndView modelAndView = new ModelAndView(LOGIN_VIEW);
    return modelAndView;
}

之后:

@RequestMapping(value = "/login", method = { GET, POST })
public ModelAndView getLoginPage() {
    ModelAndView modelAndView = new ModelAndView(LOGIN_VIEW);
    return modelAndView;
}

1 个答案:

答案 0 :(得分:4)

@GetMapping等只是适当的@RequestMapping的别名。因此,您实际上有2个@RequestMappings。在这种情况下,第二个将被忽略。在您的after块中,您可以正确地进行操作,并且在单个 @RequestMapping中具有多个映射。