【问题标题】:How to set multiple base paths for Spring REST controllers (e.g. common base path for one or more packages)如何为 Spring REST 控制器设置多个基本路径(例如,一个或多个包的公共基本路径)
【发布时间】:2018-11-04 17:34:53
【问题描述】:

我的 Spring Boot 应用程序中有几个 REST 端点。 我们目前正在使用 JAX-RS / Apache CXF(在我们的 Facade REST 端点类中使用 javax.ws.rs.Path 注释)并且目前正在迁移到 Spring REST (MVC)。 由于端点类数量众多,我们的结构如下:

com.example.domain1.Facade1.java - @Path("facade1path)
com.example.domain1.Facade2.java - @Path("facade2path)
... (much more "Facade" classes in com.example.domain1 package)

com.example.domain2.Facade3.java - @Path("facade3path)
com.example.domain2.Facade4.java - @Path("facade4path)
... (much more "Facade" classes in com.example.domain2 package)

我们以路径设置的方式配置应用程序:

"/api/domain1/facade1path" -> Facade1.java
"/api/domain1/facade2path" -> Facade2.java
"/api/domain2/facade3path" -> Facade3.java
"/api/domain2/facade4path" -> Facade4.java

使用旧的 JAX-RS / CXF 配置,我们能够以非常优雅的方式实现这一点,而无需在所有 @Path 注释中重复“/api/domain1/”或“/api/domain2/”。 我们以这种方式在特定的 CXF 配置中设置了多个“jaxrs-server”元素:

<jaxrs:server id="Domain1Server" address="/api/domain1" basePackages="com.example.domain1" />
<jaxrs:server id="Domain2Server" address="/api/domain2" basePackages="com.example.domain2" />

它有效:-)

有什么方法可以实现与 Spring REST / MVC 类似的东西,而不必在多个控制器类的注释中重复“api/domain1”或“api/domain2”-

@RequestMapping("api/domain1/facade1path"), @RequestMapping("api/domain1/facade2path"), 等等?

到目前为止,还没有找到任何资源表明 Spring 可以通过某种方式实现这一点,也许这是不可能的,但如果有一些 hack 如何做到这一点,那就太好了 :-)

提前谢谢大家!

【问题讨论】:

标签: java spring rest spring-mvc


【解决方案1】:

在Spring中创建两个Controller类,并在控制器类级别设置baseUrl。

首先将如下所示:

@RestController
@RequestMapping("/api/domain1")
public class DomainOneController {

@RequestMapping("/facade1path"), 
@RequestMapping("/facade2path") ...
}

第二个看起来像:

@RestController
@RequestMapping("/api/domain2")
public class DomainTwoController {

@RequestMapping("/facade3path"), 
@RequestMapping("/facade4path") ...
}

【讨论】:

  • 谢谢,但这不是重点 - 结构遵循 package1: Controller1 @RequestMapping("/api/domain1/facade1path") Controller2 @RequestMapping("/api/domain1/facade2path") package2: Controller3 @RequestMapping("/api/domain2/facade3path") Controller4 @RequestMapping("/api/domain2/facade3path") 所以有多个控制器类都具有“基本 URL” "(我们不想将它们合并到一个类中),它们只是放在同一个包中。我要避免的是在这个包的所有控制器类中重复“/api/domain1/”或“/api/domain2/”。
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 2016-02-16
  • 2014-03-28
  • 1970-01-01
  • 2022-01-02
  • 2012-08-08
  • 1970-01-01
  • 2021-11-08
相关资源
最近更新 更多