转发请求 Spring RestController

Forwarding request Spring RestController

我有一个 Spring REST 控制器:

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

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

我希望新客户端能够调用 v2 而旧客户端仍然能够调用 v1 端点。我查看了拦截器和过滤器。所以我应该,

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

有更好的方法吗?谢谢。

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

首先,控制器应该只封装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-代理

还有其他