gpt4 book ai didi

java - sendRedirect 未按预期工作

转载 作者:行者123 更新时间:2023-11-30 04:06:31 25 4
gpt4 key购买 nike

我有 2 个 Controller 参与一个相当简单的流程。其中一个进行一些处理并向另一个进行 POSTS,然后重定向到呈现的页面。重定向失败,但没有错误。为了简化我的用例并确定问题,我将其分解为这 3 种方法 -

@RequestMapping(value="/provider/g1", method=RequestMethod.GET)
public void g1(HttpServletRequest request, HttpServletResponse response) {
logger.debug("In g1. posting to pr1");

try {
URI location = restTemplate.postForLocation("http://localhost:8082/provider/pr1", null);
logger.debug("post response=" + location.toString());
} catch (RestClientException re) {
logger.error("Unable to post to pr1.");
}

}

@RequestMapping(value="/provider/pr1", method=RequestMethod.POST)
public void pr1(HttpServletRequest request, HttpServletResponse response) {
logger.debug("In pr1. sending redirect to rd1");
// return "redirect:/provider/rd1";

try {
String rd1Path = "http://localhost:8082/provider/rd1";
response.sendRedirect(response.encodeRedirectURL(rd1Path));
} catch (IOException e) {
logger.error("Error redirecting to rd1");
e.printStackTrace();
}
}

@RequestMapping(value="/provider/rd1", method=RequestMethod.GET)
public void rd1(HttpServletRequest request, HttpServletResponse response) {
logger.debug("In rd1");
}

我尝试了相对路径和完全限定路径,结果相同。

  • 我可以访问/provider/rd1 并获得预期的响应。
  • 当我访问/provider/g1 时,我希望重定向到/provider/rd1。

输出是-

In g1. posting to pr1.  
In pr1. sending redirect to rd1
post response=http://localhost:8082/provider/rd1

我想知道我做错了什么以及如何才能完成这项工作。
谢谢您,
SR

最佳答案

阅读javadoc of RestTemplate#postForLocation(..) 。它指出

Create a new resource by POSTing the given object to the URI template, and returns the value of the Location header.

请记住,POST-REDIRECT-GET 是 Web 应用程序中非常常见的模式。

因此,您向 http://localhost:8082/provider/pr1 发出 HTTP POST 请求,该请求返回 302 响应,其中 Location header 设置为 http://localhost:8082/provider/rd1,这是打印的内容。

您的 rd1 永远不会被调用,因为没有发送与其映射匹配的请求。

您可能希望使用 RestTemplate 的另一个 postXxx 方法。

关于java - sendRedirect 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20615983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com