我有一个Spring RestController,它处理API调用的第1版.
package rest.v1;
@RestController
@RequestMapping("v1/someResource")
public class Controller_V1 {
@RequestMapping(value = "/{resourceName}", method = RequestMethod.GET)
public Object retrieve() throws Exception {
....
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建另一个处理版本2请求的控制器.同时我想继承已经在版本1控制器中的实现.这是因为从v1到v2不变的实现将仅从v1继承.
所以像这样:
package rest.v2;
@RestController("controllerV2")
@RequestMapping("v2/someResource")
public class Controller_v2 extends Controller_v1 {
@RequestMapping(value = "/{resourceName}", method = RequestMethod.GET)
public Object retrieve() throws Exception {
//implementation overridden from v1
}
}
Run Code Online (Sandbox Code Playgroud)
这样做会导致ConflictingBeanDefinitionException.我也不确定是否应该像上面那样扩展控制器.
我知道我可以在同一个控制器的RequestMapping中使用多个路径,如下所示:
@RestController
@RequestMapping(value = { "v1/someResource", "v1/someResource" })
public class Controller_V1 {
}
Run Code Online (Sandbox Code Playgroud)
但上述情况对我的情况不起作用.
以下是控制器扩展时的堆栈跟踪:
[java] org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class …Run Code Online (Sandbox Code Playgroud)