Запросить сопоставление с несколькими подстановочными знаками

Я хочу иметь две конечные точки с символами подстановки в @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}", а все остальные будут обрабатываться с помощью "/**"

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