使用小胡子模板在Spring Boot MVC中请求转发到另一个URL

问题描述 投票:0回答:1

我正在尝试将请求转发到Spring Boot中的另一个URL。

我知道如何在同一Spring Boot应用程序中将请求从一个端点转发到另一个端点。此代码类似于-

@GetMapping("/home")
public ModelAndView home(@PathVariable(name = "env", required = false) String env) {

    return new ModelAndView("index");
}
@GetMapping("/forward")
String callForward(){
    return "forward:/home";
}

这里,如果我转到http://localhost:8080/forward,它将通过“ / home”端点作为服务器,并且我们将呈现主页。有趣的是,浏览器中的“ URL”保持不变http://localhost:8080/forward

[我的要求是>例如,当我调用http://localhost:8080/forward时,我想转发给任何第三方URL,我希望它由https://google.com/forward提供。

我该怎么办。

我愿意接受任何可以满足要求的解决方案。

java spring spring-boot spring-mvc template-engine
1个回答
0
投票

ForwardRedirect之间存在差异。

Forward:发生在服务器端,servlet容器将相同的请求转发到目标URL,因此客户端/浏览器将不会注意到差异。

重定向:在这种情况下,服务器以302以及位置标头中的新URL进行响应,然后客户端向给定URL发出另一个请求。因此,在浏览器中可见

关于您的关注,可以使用多种方法来实现。

使用RedirectView

@GetMapping("/redirect")
RedirectView callRedirect(){
    return new RedirectView("https://www.google.com/redirect");
}

ModelAndView一起使用Prefix

@GetMapping("/redirect")
ModelAndView callRedirectWithPrefix(){
    return new ModelAndView("redirect://www.google.com/redirect");
}

类似的也可以用于转发

@GetMapping("/forward")
ModelAndView callForward(){
    return new ModelAndView("forward://www.google.com/forward");
}

第二种方法(使用ModelAndView是可取的,因为在这种情况下,您的控制器在重定向或转发或仅返回某些页面的位置将保持不变。

注:如评论中所述,如果您正在寻找代理请求,我建议您检查此SO Thread

© www.soinside.com 2019 - 2024. All rights reserved.