Является ли конкретный @RequestMapping всегда вызываемым в пользу переменной @RequestMapping в 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){
    ...
  }
}

Вопрос в том, какой метод будет вызываться при керлинге. GET /info,

Во всех моих тестах getInfo был назван, что, кажется, ясно.

Но я не уверен на 100%, если это просто случайное состояние гонки или если указано, что статический путь имеет более высокий приоритет, чем переменный путь.

Даже после некоторых исследований я не смог найти спецификацию для этого случая, только несколько довольно старых (и, вероятно, устаревших) постов в блоге.

Я использую SpringBoot 2.0.2.

2 ответа

Решение

Это не счастливое состояние гонки. Шаблон без переменных пути всегда будет иметь приоритет.

Пожалуйста, обратитесь к документации Spring MVC, которая объясняет все в деталях. Pattern Comparison,

Если у вас есть путь, указанный на уровне класса (@RequestMapping("/home"), как показано ниже

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

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

тогда вам придется свернуть GET /home/info. Все пути URL определены / определены вами.

Другие вопросы по тегам