Запросить сопоставление с несколькими подстановочными знаками
Я хочу иметь две конечные точки с символами подстановки в @RequestMapping
@RequestMapping(value="/**", method = { RequestMethod.GET}, produces = "application/json")
@RequestMapping(value="/**/versions/{versionId}", method = { RequestMethod.GET}, produces = "application/json")
Когда я выполняю запрос, который должен идти /**/versions/{versionId}
он предпочитает /**
конечная точка над /**/versions/{versionId}
конечная точка, даже если запрос должен совпадать.
Я использую:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.SR2</version>
</parent>
2 ответа
Я думаю, что вы просто должны изменить порядок вашего @RequestMapping
методы.
Для меня работает http://localhost:8080/versions/1
возвращается version 1
,
И для любого другого запроса без version/{versionId}
это возвращается index
,
@Controller
public class DemoController {
@RequestMapping(value="/**/versions/{versionId}", method = RequestMethod.GET)
@ResponseBody
public String version(@PathVariable String versionId){
return "version " + versionId;
}
@RequestMapping(value="/**", method = RequestMethod.GET)
@ResponseBody
public String index(){
return "index";
}
}
Если вы хотите довольно сложное отображение запросов, попробуйте перезаписать handleRequest, как здесь: Как определить приоритетность RequestMapping Чем вы можете:
if (urlPath.contains("/versions")) {
/* forward to method with @RequestMapping(value="/get/versions/{versionId}")
}
Вместо:
@RequestMapping(value="/**/versions/{versionId}", method = { RequestMethod.GET}, produces = "application/json")
использовать:
@RequestMapping(value="/response_for_versions/{versionId}", method = { RequestMethod.GET}, produces = "application/json")
Теперь все ".../version /{versionId}" должны быть перенаправлены в "/response_for_versions/{versionId}", а все остальные будут обрабатываться с помощью "/**"