代码之家  ›  专栏  ›  技术社区  ›  Maddy

转发请求弹簧复位控制器

  •  0
  • Maddy  · 技术社区  · 6 年前

    我有一个弹簧休息控制器:

    @RestController
    @RequestMapping("v1/employee")
    public class controller1 {
     getMethod(@PathVariable String param1, String param2){}
     postMethod(){}
    }
    

    我想介绍一个新的端点版本 v2 它解析参数:param1、param2并转发到 v1 请求URL。

    我希望新客户能打电话给我 V2 老客户仍然可以打电话 V1 端点。我研究了拦截器和过滤器。所以我也应该,

    1. 将请求转发到v1或,
    2. 内部调用控制器方法

    有更好的方法吗?谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mark Bramnik    6 年前

    它实际上取决于应用程序的性质

    首先,控制器应该只封装与HTTP相关的东西,所以业务逻辑可能是在服务中实现的。

    如果是这样,那么就不需要重定向请求,如果你在谈论同一个Java应用程序,那么最好是把服务注入到新的控制器并调用它。

    class OldController {
       MyService srv;
    
       @GetMapping(...)
       public oldGet() {
           srv.doSomething();
       }
    }
    
    class NewController {
       MyService srv;
    
       @GetMapping(...)
       public newGet() {
           srv.doSomething();
           //or 
           srv.doSomethingElse(); 
       }
    }
    

    现在,对于路由,您甚至可以从外部进行(就像在某种代理中,它为您重写URL,并重定向到甚至可以驻留在不同服务器上的正确控制器)。 解决这些问题的方法是:

    • NGNIX
    • 祖鲁
    • HA代理

    还有其他的