如何在 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 {
}
我们已经在 SpringBoot 中开发了一些 REST API。
现在我们要在所有 @RequestMapping
.
/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 {
}