设置Spring REST控制器基本URL而不更改静态资源基本URL

时间:2017-11-23 19:27:11

标签: spring

我有一个带有一组休息控制器的弹簧启动应用程序(@RestController)。

我在application.properties文件中使用以下属性来设置基本网址:

server.context-path=api

此属性也会更改我的静态资源的基本URL。我不想让他们改变,我该怎么做?

注1 为什么我想这样做?我想在我的服务器上提供单页应用程序(反应应用程序),并且我希望对/api/**的大部分请求进行授权。我希望所有其他GET请求都由react路由器处理。这就是为什么我不希望我的静态资源的基本URL发生变化。

4 个答案:

答案 0 :(得分:5)

您可以使用

spring.data.rest.base-path=/api
使用

在您的应用程序属性中

@BasePathAwareController 

在您的控制器类上。

使用时

server.context-path=ctx

上下文路径适用于整个应用程序,包括

  • 静态资源
  • 使用@Controller
  • 创建的结束点
  • 使用@RestController
  • 创建的结束点
  • 使用@BasePathAwareContoller
  • 创建的结束点
  • 使用@RepositoryRestController
  • 创建的结束点
  • 使用@RepositoryRestResource
  • 创建的结束点

使用时

spring.data.rest.base-path=/api

前缀适用于

  • 使用@BasePathAwareContoller
  • 创建的结束点
  • 使用@RepositoryRestController
  • 创建的结束点
  • 使用@RepositoryRestResource
  • 创建的结束点

你可以同时使用

server.context-path=ctx
spring.data.rest.base-path=/api

应用/ctx/api/

之类的前缀

答案 1 :(得分:2)

您可以将路径定义为.properties文件中的属性,并使用@Value注释读取它

例如

在application.properties

common.basepath = /test

在控制器中使用

@RequestMapping(@Value("${common.basepath}"))

答案 2 :(得分:1)

您不应该使用此属性,因为它会更改整个应用程序的上下文路径。

为什么不在/api/yourResource注释中指定RequestMapping,例如:

@RestController
@RequestMapping("/api/oneController")
public class OneController { ... }

.....

@RestController
@RequestMapping("/api/anotherController")
public class AnotherController { ... }

答案 3 :(得分:0)

试试这个:

@RequestMapping(ControllerConstant.BASE_API_URL + "/audit")

哪里:

public class ControllerConstant {
    public static final String BASE_API_URL = "/whatever/api/v1";
}

这样,基本 URL 集中在 ControllerConstant.BASE_API_URL 中。

我希望这会有所帮助。