【问题标题】:@Path equivalent in spring-boot@Path 在 spring-boot 中等效
【发布时间】:2015-03-07 13:27:24
【问题描述】:

假设我有一个控制器,其方法定义如下:

@RestController
@RequestMapping("/{user-id}/foo")
public class FooController {


    @RequestMapping("bar")
    public BarController someBarLogic() {
      //
    }
}

是否可以在不指定整个根路径的情况下比 {user-id}/foo/bar 更进一步? (有没有办法将路径相对化,例如 Jersey 中的 @Path 注释或 Spring-Boot 中的等效注释?)

【问题讨论】:

  • 我真的不知道“走得更远”是什么意思。您需要@PathVariable(查看 spring 用户指南以获取有关@RequestMapping 功能的帮助)?
  • 我会尽量让它更清楚。假设我想更进一步,例如 /{user-id}/foo/bar/{some-thing}。通常,我会用 RequestMapping(bar/{some-thing}) 定义一个处理程序。我的问题是:我可以在不指定路径的情况下调用 {some-thing} 直到 {user-id}/foo/bar 吗?
  • 您可以根据需要定义@RequestMapping,例如@RequestMapping("bar/{sth}/zoo")

标签: java spring-boot


【解决方案1】:

看起来您正在寻找路径模式中的 ant 样式通配符。看看这里:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-patterns

因此,您可以像这样定义RequestMapping

@RestController
@RequestMapping("/foo")
public class DemoController {
    @RequestMapping(value = "/bar/**", method = RequestMethod.GET)
    public String getDemo() {
        return "Hello world!";
    }
}

将匹配/foo/bar/baz

好的,根据您的评论再举一个例子:

@RestController
public class DemoController {
    @RequestMapping(value = "/**/baz/**", method = RequestMethod.GET)
    public String getDemo() {
        return "Hello world!";
    }
}

这将匹配与上面相同的 url,以及 /foo/bar/baz/bar/foo

【讨论】:

  • 这可以处理用例吗:假设我有一个 URL /foo/bar/baz。 servlet 映射到 /。有一个带有@RequestMapping("/foo") 的控制器。这个控制器内部有一个带有@RequestMapping("/bar") 的方法。所以现在,有一个可以处理 /foo/bar 的组件。我还想要一个无需在其中指定 /foo/bar 即可处理 /baz 部分的资源。就像调用 /baz 时一样,它应该根据 /foo/bar 来相对化路径。
  • @ajj 我已经更新了答案中的代码 sn-p 以使用您的特定示例,并且我也对其进行了测试。这就是你要找的东西吗?
  • code @RestControl @RequestMapping("/foo") public class DemoController { @RequestMapping(value = "/bar", method = RequestMethod.GET) public String getDemo() { return "Hello世界!”; } } code @RestController public class BazController { @RequestMapping(value = "/baz", method = RequestMethod.GET) public String getBaz() { return "Bazzz!";有一个 Bazcontroller 的方法映射到 /baz。我不想明确指定到 BazController 的映射为 /foo/bar/baz。当它在 URL 中看到 /baz 时,它应该相对于 /foo/bar 解析 /baz。
  • @ajj 又加了一个例子,是这样吗?
  • 很遗憾没有。 /baz 是一个单独的资源。在泽西岛,如果你调用 /baz,有一种方法可以将调用相对化为 /foo/bar。这在spring boot中也可以吗?
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2019-10-06
  • 2022-08-14
  • 2018-05-17
  • 2021-03-27
  • 2018-07-01
相关资源
最近更新 更多