转发请求Spring RestController

时间:2018-07-25 02:07:24

标签: spring rest spring-boot 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. 内部调用控制器方法

有更好的方法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

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

首先,控制器应该只封装与HTTP相关的内容,因此业务逻辑可能在Services中实现。

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

class OldController {
   MyService srv;

   @GetMapping(...)
   public oldGet() {
       srv.doSomething();
   }
}

class NewController {
   MyService srv;

   @GetMapping(...)
   public newGet() {
       srv.doSomething();
       //or 
       srv.doSomethingElse(); 
   }
}

现在,对于路由,您甚至可以在外部进行路由(例如在某种代理中,该代理为您进行url重写并重定向到甚至可以驻留在其他服务器上的正确控制器。 这些解决方案是:

  • NGNIX
  • Zuul
  • HA-代理

还有其他人