将请求转发到 Spring MVC 中的另一个控制器
Forward request to another controller in Spring MVC
我想知道是否有一种方法可以将请求从一个控制器转发到另一个控制器而无需实际更改浏览器中的 URL。
@RequestMapping(value= {"/myurl"})
public ModelAndView handleMyURL(){
if(somecondition == true)
//forward to another controller but keep the url in the browser as /myurl
}
我在网上找到的示例正在重定向到另一个 url,这导致其他控制器处理该问题。我不想更改 URL.
据我所知,请求的 "forward" 将由 servlet 在内部完成,因此不会有第二个请求,因此 URL 应该保持不变。尝试使用以下代码。
@RequestMapping(value= {"/myurl"})
public ModelAndView handleMyURL(){
if(somecondition == true){
return new ModelAndView("forward:/targetURL");
}
}
尝试 return 一个 String
而不是 ModelAndView
,并且字符串是正向的 url。
@RequestMapping({"/myurl"})
public String handleMyURL(Model model) {
if(somecondition == true)
return "forward:/forwardURL";
}
您可以在通过自动装配获得对它的引用后直接调用控制器方法,而不是转发。控制器是正常的 spring 个 bean:
@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) {
...
}
}
我想知道是否有一种方法可以将请求从一个控制器转发到另一个控制器而无需实际更改浏览器中的 URL。
@RequestMapping(value= {"/myurl"})
public ModelAndView handleMyURL(){
if(somecondition == true)
//forward to another controller but keep the url in the browser as /myurl
}
我在网上找到的示例正在重定向到另一个 url,这导致其他控制器处理该问题。我不想更改 URL.
据我所知,请求的 "forward" 将由 servlet 在内部完成,因此不会有第二个请求,因此 URL 应该保持不变。尝试使用以下代码。
@RequestMapping(value= {"/myurl"})
public ModelAndView handleMyURL(){
if(somecondition == true){
return new ModelAndView("forward:/targetURL");
}
}
尝试 return 一个 String
而不是 ModelAndView
,并且字符串是正向的 url。
@RequestMapping({"/myurl"})
public String handleMyURL(Model model) {
if(somecondition == true)
return "forward:/forwardURL";
}
您可以在通过自动装配获得对它的引用后直接调用控制器方法,而不是转发。控制器是正常的 spring 个 bean:
@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) {
...
}
}