将请求转发给Spring MVC中的另一个控制器

时间:2015-08-03 21:20:50

标签: java spring spring-mvc annotations

我想知道是否有一种方法可以将请求从一个控制器转发到另一个控制器,而无需在浏览器中实际更改URL。

@RequestMapping(value= {"/myurl"})
public ModelAndView handleMyURL(){

    if(somecondition == true)
    //forward to another controller but keep the url in the browser as /myurl
}
我在网上找到的例子是重定向到另一个网址,导致其他控制器处理这个问题。我不想更改网址。

3 个答案:

答案 0 :(得分:3)

尝试返回String而不是ModelAndView,并将字符串作为转发网址。

@RequestMapping({"/myurl"})
public String handleMyURL(Model model) {
    if(somecondition == true)
        return "forward:/forwardURL";
}

答案 1 :(得分:3)

您可以直接在通过自动装配引用控制器方法之后直接调用控制器方法,而不是转发。控制器是普通的春豆:

@Controller
public class MainController {
  @Autowired OtherController otherController;
  @RequestMapping("/myurl")
  public String handleMyURL(Model model) {
    otherController.doStuff();
    return ...;
  }
}

@Controller
public class OtherController {
  @RequestMapping("/doStuff")
  public String doStuff(Model model) {
    ...
  }
}

答案 2 :(得分:1)

据我所知,请求的“转发”将由servlet在内部完成,因此不会有第二个请求,因此URL应保持不变。请尝试使用以下代码。

@RequestMapping(value= {"/myurl"})
public ModelAndView handleMyURL(){

    if(somecondition == true){
        return new ModelAndView("forward:/targetURL");
    }
}