在 spring 控制器的重定向中将请求方法从 POST 更改为 GET

Posted

技术标签:

【中文标题】在 spring 控制器的重定向中将请求方法从 POST 更改为 GET【英文标题】:Change the request method from POST to GET in a redirection from spring controller 【发布时间】:2019-02-01 22:24:51 【问题描述】:

我有一个 spring mvc 控制器,它接受一个 post 请求,它需要重定向到一个 URL(GET 请求)。

@RequestMapping(value = "/sredirect", method = RequestMethod.POST)
public String processForm(HttpServletRequest request) 
    System.out.println("Ews redirect hit !!! ");
request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE,HttpStatus.MOVED_PERMANENTLY);
    
    return "redirect:https://www.google.com/";

并且该类使用@RestController 进行注释。我总是收到 405,重定向 url 不允许的方法。 (即 google.com)。

根据文档 (https://www.rfc-editor.org/rfc/rfc7238),它应该允许更改方法。我不确定我做错了什么?有人可以帮忙吗

【问题讨论】:

听起来你得到的是 405 而不是你的日志记录,对吗?您是否正在对您的 /sredirect 进行 HTTP POST?这是这个控制器唯一能接受的。 不,我的日志正在控制台中正确打印,. 好的,基于此,我认为 RestControllers 不能简单地返回“redirect:”,就像非 Rest Controller 可以:***.com/questions/29085295/…(不作为答案添加,因为我其实不知道:-)) @dbreaux 你是对的,链接中提到的解决方案对我有用。您可以将此添加为答案,我会接受。 :) 【参考方案1】:

您是否尝试在请求映射中接受 GET?

method =  RequestMethod.POST, RequestMethod.GET 

【讨论】:

嗯好的。也许将函数更改为返回类型 void 并调用 request.sendRedirect("https://www.google.com"); 而不是返回。【参考方案2】:

看起来 Rest Controller 不能使用简单的“redirect:”约定,就像 non-Rest Controller 一样。见Spring MVC @RestController and redirect

【讨论】:

以上是关于在 spring 控制器的重定向中将请求方法从 POST 更改为 GET的主要内容,如果未能解决你的问题,请参考以下文章

Playframework 中 HTTPS 协议中的重定向控制器方法

Google OAUTH:请求中的重定向URI与注册的重定向URI不匹配

在 Spring Boot 中将未知请求重定向到 index.html

HTTP协议基础与web服务的重定向,跳转以及请求转发

Spring 跨重定向请求传递数据

如何做nginx的重定向