Spring 3.2 MVC中的API版本控制

我正在将现有的Web服务移植到Spring

3.2。我需要版本化的API,并且每个新版本都有一个控制器。我不想在较新的控制器中重新定义方法,而是想自动将请求映射到旧的控制器(如果在最新的控制器中找不到)。

例如,如果ControllerV1has /home/loginand ControllerV2has

/login,那么我希望这样路由请求。

/home -> ControllerV1

/v1/home -> ControllerV1

/v2/home -> ControllerV1

/login -> ControllerV1

/v1/login -> ControllerV1

/v2/login -> ControllerV2

一种选择是在中提供多个路径@RequestMapping。但是,这意味着每当在较新版本中添加API时,都将从所有较旧的controllesr中删除路径。实现这一目标的最优雅的方法是什么?

回答:

我建议为此简单地使用继承:

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

@Controller

@RequestMapping("v1/")

public class Version1Controller {

@ResponseBody

@RequestMapping("foo")

public String foo() {

return "Foo 1";

}

@ResponseBody

@RequestMapping("bar")

public String bar() {

return "bar 1";

}

}

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

@Controller

@RequestMapping({ "v2/", "latest/" })

public class Version2Controller extends Version1Controller {

@Override

@ResponseBody

@RequestMapping("bar")

public String bar() {

return "bar 2";

}

}

在这里,您将映射以下URL:

  • v1/foo -返回“ Foo 1”
  • v2/foo -返回“ Foo 1”-从版本1继承
  • v1/bar -返回“第1条”
  • v2/bar -返回“条2”-从版本1覆盖行为。
  • latest/foo - 如同 v2/foo
  • latest/bar - 如同 v2/bar

以上是 Spring 3.2 MVC中的API版本控制 的全部内容, 来源链接: utcz.com/qa/404289.html

回到顶部