我希望能够定义一个父控制器类,它将具有“/ api”的映射,然后使用我的不同实现扩展该控制器。 所以ApiController会有:
@Controller
@RequestMapping("/api")
例如,我的用户控制器应扩展基本api控制器并在路径中添加“/ users”,因此它将回答“/ api / users”请求。因此UserController将具有:
@Controller
@RequestMapping("/users")
但由于它扩展了ApiController,它将有效地回答/ api / users。
当然我可以在所有控制器之前添加“/ api”,这样就可以在没有父类的情况下实现,但是如果可能的话,我更喜欢“正确的方式”,这样我就可以用更干净的方法来定义我的api实现和更明显的路径。
我尝试扩展ApiController基类,但这不起作用,UserController仍然回答“/ users”并忽略基类“/ api”。
答案 0 :(得分:3)
嗯。你可以试试这个,这对我有用:
@RequestMapping("/abstract")
public abstract class AbstractController {
}
@Controller
public class ExtendedAbstractController extends AbstractController {
@RequestMapping("/another")
public String anotherTest() {
return "another";
}
}
注意,您的基类必须没有@Controller
注释,且必须抽象。
如果您尝试扩展而不是注释为控制器的抽象类,并且具有@RequestMapping
s,则会在RequestMappingHandlerMapping
初始化的步骤中出现错误。
答案 1 :(得分:0)
您可以通过以下方式实现:
DispatcherServlet
的子上下文看看this answer。这是类似的问题,但适用于@RestControllers
。