当前位置: 首页 > 知识库问答 >
问题:

在一个Spring Boot应用程序中为不同的WebAPI配置路径前缀

颜霖
2023-03-14

我有一个带有多个WebAPI的Spring Boot应用程序。如何通过应用程序属性以不同的方式配置每个WebAPI的路径前缀?

例如,我有一个UserRestController和一个StarShipRestController。两者都是不同WebAPI的一部分,但由同一个Spring Boot App提供服务。RestController应该只包含资源URL的最后一部分。路径前缀不应该是RestController的一部分:

@RestController
@RequestMapping("users")
class UserRestController  {

    // methods...
}

@RestController
@RequestMapping("starships")
class StarShipRestController  {

    // methods...
}

具体路径前缀在应用程序中。属性:

api.user.pathPrefix=/api/v1
api.starship.pathPrefix=/universe

问题是如何将路径前缀应用于RESTController?

如果Spring Boot App中只有一个WebAPI,我可以使用WebMvcConfigrer。但这不起作用,因为我有几个WebAPI。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer  {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.addPathPrefix("api", HandlerTypePredicate.forAnnotation(RestController.class));
    }
}

共有1个答案

丁业
2023-03-14

对于单个Spring Boot应用程序,您只能有一个上下文路径(可以使用server.servlet.context path进行配置)。这意味着你所要求的是不可能的。

实现它的唯一方法是更改控制器中的@Request estMap注释以包含您想要的完整路径。

@RestController
@RequestMapping("/api/v1/users")
class UserRestController  {

    // methods...
}
@RestController
@RequestMapping("/universe/starships")
class StarShipRestController  {

    // methods...
}

据我所知,没有其他办法。

考虑到您的请求,我问自己是否不应该有两个不同的Spring-Boot应用程序而不是一个。

 类似资料:
  • 它不使用自定义工厂。并且已经有几个其他模块(对于其他特性来说是gradle模块)正在使用WorkManger而不使用Factory。现在,如果我更改这个配置并添加一个工厂,它可能会破坏其他几个地方的work manager设置。我是否可以只对模块中的WorkManager类使用工厂(或者只有一些WorkManager类应该通过工厂初始化,其他的使用默认配置)。有可能吗?希望我的问题清楚了。

  • 我在使用DOMConfigurator的JavaEE Web应用程序中使用Log4j时面临一个问题。我的类路径log4j.jar文件,log4j.xml文件的路径 /WEB-INF/config/log4j.xml. 以下是例外情况: 下面是获取log4j的代码。servlet中的xml文件: 进入网页。xml

  • 我有一个springboot应用程序,我试图使用ByteBuddy来测试它。我遇到了类路径问题,我无法理解。 首先,以下是关于这方面的其他文献: https://github.com/raphw/byte-buddy/issues/473 这里需要注意的一点是,如果我使用IntelliJ运行应用程序,它不会使用uber-jar,而是通过main类运行,其中有一堆JAR作为类路径参数。 由于这种差异

  • 我已经使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎和作为可执行JAR文件的包生成了一个Spring Boot web应用程序。 使用的技术: Spring启动2.0.0。M6,Java8, Maven 这是我的安全配置 在我的 但当我在http://localhost:1234/iberiaWebUtils,而不是去http://localhost:1234/ibe

  • 我的系统路径是,我的应用程序文件夹在系统文件夹内。我面临以下错误... 警告:require_once(C:/xampp/htdocs/codeigniter/core/codeigniter.php)[function.require once]:打开流失败:在C:\xampp\htdocs\codeigniter\index中没有这样的文件或目录。php在线202 致命错误:require_o

  • 我正在处理部署在tomcat7环境中的两个WAR应用程序(我们称它们为app1.WAR和app2.WAR)。通过setenv.sh,我将类路径扩展到位于/opt/configurations中的共享文件夹。 我想这样构造配置: