Является ли конкретный @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 определены / определены вами.