首页 > 解决方案 > Spring RedirectAttributes 不适用于 @PostMapping(value = { "/", "/{id}" })

问题描述

我有一个像这样的控制器:

@PostMapping(value = { "/" })
public String home(HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
return "redirect:/index.html?xyz=abc";
}

它将请求重定向到 Angular 应用程序并按预期工作。但是一旦我将 PostMapping 注释更改为:

@PostMapping(value = { "/", "/{id}" })

它开始在 chrome 控制台中给我一个 405 错误:

加载资源失败:服务器响应状态为 405 () https://My_IP/index.html?xyz=abc

谁能建议我在这里缺少什么?是否需要在 Java 端或 Angular 端进行修复?

角度版本:8.1.3

RedirectAttributes 来自 org.springframework.web.servlet.mvc.support.RedirectAttributes

标签: angularspring-bootspring-mvcjava-11

解决方案


在@postmapping 中添加“/{id}”后,系统会尝试将get 重定向请求与/id 本身匹配,因为它假定“index.html”为id。由于它是一个 get 重定向,而 /id 是一个 post 请求,它给出了 405 错误。

我没有直接使用“/”,而是为其添加了一个 API 名称,从而避免了这个问题,如下所示:

 @PostMapping(value = { "/home", "/home/{id}" })

在此之后,系统没有尝试将 https://My_IP/index.html?xyz=abc 请求匹配到 /home 或 /home/id。


推荐阅读