在实现Spring控制器时共享公共父路径

The*_*uck 7 api rest spring controller

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

@Controller
@RequestMapping("/api")
Run Code Online (Sandbox Code Playgroud)

例如,我的用户控制器应扩展基本api控制器并在路径中添加"/ users",因此它将回答"/ api/users"请求.所以UserController将具有:

@Controller
@RequestMapping("/users")
Run Code Online (Sandbox Code Playgroud)

但由于它扩展了ApiController,它将有效地回答/ api/users.

当然,我可以在所有控制器之前添加"/ api",这样就可以在没有父类的情况下实现,但是如果可能的话,我更喜欢"正确的方式",这样我就可以用更清晰,更明显的方式定义我的api实现路径.

我尝试扩展ApiController基类,但这不起作用,UserController仍然回答"/ users"并忽略基类"/ api".

mas*_*ted 6

嗯 您可以尝试一下,这对我有用:

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


}

@Controller
public class ExtendedAbstractController extends AbstractController {

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

}
Run Code Online (Sandbox Code Playgroud)

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

如果您尝试进行扩展而不是抽象类注释为控制器,并且这样做,@RequestMapping则会在RequestMappingHandlerMapping初始化步骤上出错。