转发请求到新控制器

时间:2015-09-30 09:20:47

标签: java spring spring-mvc java-ee web

我有来自两个独立项目的这两个控制器,我们可以命名:

  • project1.controller1
  • project2.controller1

显然这些是来自不同项目的两个Spring控制器。我想要的是将project1.controller1作为网关,所有请求都将在这里发送。并将处理请求,如果它将转到project2.controller1或新的控制器。

一些伪代码:

@Controller
public class someClassFromProject1{

   @RequestMapping(value="/controller1", method=RequestMethod.POST)
   public String smsCatcher(String target, HttpServletRequest request,
        HttpServletResponse response){
           //some processing, converting request to string, etc
           if("someStringThatIsPartOfTheRequest".equals("someString"))
            //carry request and forward it to project2.controller1
           else
            //go to another external controller
         }

    }

在project2.controller 1中看起来像这样:

@Controller
public class someClassFromProject2{

   @RequestMapping(value="/controller1", method=RequestMethod.POST)
   public String smsCatcher(String target, HttpServletRequest request,
        HttpServletResponse response){
          //processing
   }
  }

我已经尝试过return "forward:/someUrl";return "redirect:someUrl";了。它不起作用,它没有达到project2.controller1。那么关于这个的任何想法?

编辑:忘记添加这个,不同的项目意味着不同的WAR,但部署在同一个服务器上。请求应该从project1.controller1转移到project2.controller1,因为我将在那里处理请求。

谢谢!

3 个答案:

答案 0 :(得分:0)

您需要使用redirect代替forward

答案 1 :(得分:0)

如果主机与当前主机的主机不同,则需要协议

return "redirect:http://www.yahoo.com";

查看Spring Web MVC framework中的重定向:前缀部分,同时查看this

  

逻辑视图名称,例如redirect:/ myapp / some / resource将   相对于当前Servlet上下文的重定向,而名称如   重定向:http://myhost.com/some/arbitrary/path将重定向到   绝对URL。

答案 2 :(得分:0)

想出来但是它有点乱,我用HttpClient将我的请求发布到URL。它还带有转发请求。无论如何,感谢所有帮助人员。谢谢:))