如何在 Spring 中为所有控制器 URL 添加一些文本

How to prepend some text to all controller URL in Spring

我们已经在 SpringBoot 中开发了一些 REST API。

现在我们要在所有 @RequestMapping.

前添加一些文本(API 的版本,例如 /v1/

除了在每个 @RequestMapping

前加上 /v1/ 之外,还有什么方法可以做到这一点

示例:当前 RequestMapping /employess/cars/1/driver

需要像这样构建/v1/employess/v1/cars/1/driver

您至少可以通过两种方式完成。

选项 1:如下扩展 AbstractAnnotationConfigDispatcherServletInitializer:

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {


    @Override
    protected String[] getServletMappings() {
        return new String[] { "/v1/*" };
    }

}

选项 2:在您希望版本前置的控制器上的 class 级别添加请求映射,如下所示

@RestController
@RequestMapping("/v1")
public class Controller {
}

我会选择选项 1。

您可以在 application.properties 文件中使用这样的 属性:

server.servlet.contextPath=/v1

或者您可以拥有一个基本控制器 class 并使用您的所有控制器扩展它 classes

@RestController
@RequestMapping(value = "${rest.api.version}")
public class MyAbstractController {
}

并将 rest.api.version 存储在您的 application.properties 文件中。

如果你想为每个请求附加“/v1”,你可以通过在class级别使用@RequestMapping注解来实现,这样所有传入的调用(具有“/v1”在其中)将登陆您的控制器

@RestController
@RequestMapping("/v1")
public class YourController {
}