Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring控制器中重定向的最佳实践_Java_Spring_Spring Mvc - Fatal编程技术网

Java Spring控制器中重定向的最佳实践

Java Spring控制器中重定向的最佳实践,java,spring,spring-mvc,Java,Spring,Spring Mvc,在这里我必须学习控制器方法,例如 (案例1)一种方法是 @Controller @requestMapping("main") Class ControllerClass{ @RequestMapping("first", method = RequestMethod.POST) public String post(Model model){ //processing return "redirect:second"; } @

在这里我必须学习控制器方法,例如

(案例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";
    }
}
这两种方法都是正确的,但我想知道哪种方法更能避免我最近遇到的问题:


当我从另一个控制器将请求转发到/main/first时,代码中出现了404错误,使用的是案例1

根据Spring文档:

重定向:前缀

虽然使用RedirectView可以很好地工作,但是如果控制器本身创建了RedirectView,那么无法避免控制器知道正在发生重定向的事实。这确实是次优的,而且把事情联系得太紧密了。控制器不应该真正关心如何处理响应。一般来说,它应该只根据注入到其中的视图名称进行操作

特殊的重定向:前缀允许您完成此操作。如果返回的视图名称的前缀为redirect:,UrlBasedViewResolver(和所有子类)会将其识别为需要重定向的特殊指示。视图名称的其余部分将被视为重定向URL

净效果与控制器返回重定向视图的效果相同,但现在控制器本身可以根据逻辑视图名称进行操作。诸如redirect:/myapp/some/resource之类的逻辑视图名称将相对于当前Servlet上下文重定向,而诸如redirect:之类的名称将重定向到绝对URL


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

第一个案例真的有效吗?没有映射匹配
second
,只有一个匹配
main/second
,我错了吗?@sp00m是的,它工作正常