8

我希望能够定义一个具有“/api”映射的父控制器类,然后用我的不同实现扩展该控制器。所以 ApiController 将有:

@Controller
@RequestMapping("/api")

例如,我的用户控制器应该扩展基本 api 控制器,并将“/users”添加到路径中,因此它将响应“/api/users”请求。所以 UserController 将有:

@Controller
@RequestMapping("/users")

但由于它扩展了 ApiController,它将有效地响应 /api/users。

当然,我可以在所有控制器前面加上“/api”,这样就可以在没有父类的情况下实现这一点,但如果可能的话,我更喜欢“以正确的方式”来做,这样我就可以用更清晰、更明显的方式定义我的 api 实现小路。

我尝试扩展 ApiController 基类,但这不起作用,UserController 仍然响应“/users”并忽略基类“/api”。

4

2 回答 2

7

嗯。你可以试试这个,它对我有用:

@RequestMapping("/abstract")
public abstract class AbstractController {


}

@Controller
public class ExtendedAbstractController extends AbstractController {

   @RequestMapping("/another")
   public String anotherTest() {
       return "another";
   }

}

请注意,您的基类必须没有@Controller注释并且必须是abstract

如果您尝试扩展注释为控制器的非抽象类并且有@RequestMappings 您在RequestMappingHandlerMapping初始化的步骤中会出现错误。

于 2012-08-21T15:30:41.233 回答
0

您可以通过以下方式实现:

  1. 为具有相同路径前缀的控制器创建子上下文配置
  2. DispatcherServlet创建具有自己映射到某个路径的子上下文

看看这个答案。这是类似的问题,但对于@RestControllers.

于 2016-06-07T07:25:14.203 回答