Spring 3.2 MVC中的API版本控制
我正在将现有的Web服务移植到Spring
3.2。我需要版本化的API,并且每个新版本都有一个控制器。我不想在较新的控制器中重新定义方法,而是想自动将请求映射到旧的控制器(如果在最新的控制器中找不到)。
例如,如果ControllerV1
has /home
和/login
and ControllerV2
has
/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