是否总是调用特定的 @RequestMapping 以支持 Spring 中的变量 @RequestMapping

Is a specific @RequestMapping always called in favour of a variable @RequestMapping in Spring

让我们假设以下控制器:

@RestController
public class MyController {

  @RequestMapping(method = GET, path = "/info")
  public InfoModel getInfo(){ 
    ... 
  }

  @RequestMapping(method = GET, path = "/{resourceId}")
  public ResourceModel getResource(@PathVariable("resourceId") String resourceId){
    ...
  }
}

问题是:curling时会调用哪个方法GET /info

在我所有的测试中都调用了 getInfo,这似乎很清楚。

但我不能 100% 确定这是否只是一个幸运的竞争条件,或者是否指定静态路径的优先级高于可变路径。

即使经过一些研究,我也找不到这种情况的规范,只有一些非常古老(可能已经过时)的博客文章。

我正在使用 SpringBoot 2.0.2。

这不是幸运的比赛条件。没有路径变量的模式将始终优先。

请参阅 Spring MVC 文档,该文档在 Request Mapping 下详细解释了所有内容 Pattern Comparison

如果您在 class 级别指定了路径 (@RequestMapping("/home"),如下

@RestController
@RequestMapping("/home")
public class MyController {

      @RequestMapping(method = GET, path = "/info")
      public InfoModel getInfo(){ 
        ... 
      }
}

那么你将不得不 curl GET /home/info。所有 urls 路径都是你 defined/decided。