С помощью Spring могу ли я создать несколько необязательных переменных пути?

#java #spring #rest

#java #spring #rest

Вопрос:

Я пытаюсь использовать несколько необязательных переменных пути в Spring, как это /country/region/city/Chicago/street или /country/USA/region/Indiana/city/street/ , и я хочу использовать только один метод для этого, например

 @GetMapping(value = "/country/{country}/region/{region}/city/{city}/street/{street}")
public Street getStreet(@PathVariable String country,
                        @PathVariable String region,
                        @PathVariable String city,
                        @PathVariable String street) {
    return new Street ();
}
  

но если я хочу использовать несколько переменных пути, я должен использовать всю комбинацию значений аннотации @GetMapping, например

 @GetMapping(value = {
                        "/country/{country}/region/{region}/city/{city}/street/{street}",
                        "/country/region/{region}/city/{city}/street/{street}",
                        "/country/{country}/region/city/{city}/street/{street}",
                        /*
                          intermediate combinations
                        */
                        "/country/region/city/street/",
                    })
public Street getStreet(@PathVariable(required = false) String country,
                        @PathVariable(required = false) String region,
                        @PathVariable(required = false) String city,
                        @PathVariable(required = false) String street) {
    return new Street ();
}
  

Как я могу уменьшить количество комбинаций? Возможно, лучшим способом было бы использовать @RequestParam, но я должен использовать @PathVariable

Комментарии:

1. Похоже, вместо этого вы могли бы поиграть со строкой запроса, например GET /street?country=...amp;region=... .

2. По какой причине вы должны использовать переменные пути для этого?

3. Поскольку /country/region/city/street/ это другой путь, чем /country/{country}/region/city/street/ , вы должны указать его отдельно.

4. Для чего нужны параметры запроса.