gpt4 book ai didi

java - Spring Controller中重定向的最佳实践

转载 作者:行者123 更新时间:2023-11-29 05:20:53 25 4
gpt4 key购买 nike

这里我必须以 Controller 方法为例,

(案例1)一种方式是

@Controller
@requestMapping("main")
Class ControllerClass{

@RequestMapping("first", method = RequestMethod.POST)
public String post(Model model){
//processing
return "redirect:second";
}

@RequestMapping("second", method = RequestMethod.GET)
public String post(Model model){
//processing
return "myview";
}
}

而(案例 2)另一种方式是

@Controller
@requestMapping("main")
Class ControllerClass{

@RequestMapping("first", method = RequestMethod.POST)
public String post(Model model){
//processing
return "redirect:/main/second";
}

@RequestMapping("second", method = RequestMethod.GET)
public String post(Model model){
//processing
return "myview";
}
}

两种方法都可以正常工作,但我想知道哪种方法更好,以避免将来出现像我最近遇到的问题:

当我将请求从另一个 Controller 转发到 /main/first 时,我在使用案例 1 的代码中遇到了 404 错误。

最佳答案

根据 Spring 文档:

重定向:前缀

虽然使用 RedirectView 工作正常,但如果 Controller 本身创建了 RedirectView,则无法避免 Controller 知道正在发生重定向的事实。这确实不是最理想的,并且将事物耦合得太紧密。 Controller 不应该真正关心如何处理响应。通常,它应该仅根据已注入(inject)其中的 View 名称进行操作。

特殊的 redirect: 前缀可以让你完成这个。如果返回的 View 名称具有前缀 redirect:,则 UrlBasedViewResolver(和所有子类)会将此识别为需要重定向的特殊指示。 View 名称的其余部分将被视为重定向 URL。

最终效果与 Controller 返回 RedirectView 相同,但现在 Controller 本身可以简单地根据逻辑 View 名称进行操作。诸如 redirect:/myapp/some/resource 之类的逻辑 View 名称将相对于当前 Servlet 上下文进行重定向,而诸如 redirect: http://myhost.com/some/arbitrary/path 之类的名称将重定向。将重定向到一个绝对 URL。

大多数实时企业项目更喜欢在他们使用的所有 Controller 中使用案例 2,这样不同 Controller 之间的调用就可以了。

关于java - Spring Controller中重定向的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24818802/

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