В Spring (загрузка) я могу экспортировать значения аннотаций в свойства приложения / среды, используя синтаксис ${...}
:
@RequestMapping("${some.path.property}")
Я также могу привязать контроллер к нескольким путям:
@RequestMapping("/one", "/two")
Как мне объединить два? Я хотел бы определить список путей в моих свойствах, как разделенный запятыми /one, /two
или (предпочтительно) как список в моем application.yaml
:
some.path.property:
- /one
- /two
Но как я могу интерполировать любой вид списка в аннотации?
@RequestMapping(???)
Редактировать: я не мог понять, как читать весь список из YAML (может быть, потому что он превратился в отдельные свойства some.path.property[0]
, some.path.property[1]
... во время разбора YAML?)
Для более простого случая одного свойства CSV, скажем:
some.csv.property: /one, /two
Я могу использовать замену свойства: "${some.csv.property}"
или явное разделение SpEL: "#{'${some.csv.property}'.split('[, ]+')}"
, чтобы преобразовать его в массив, но в обоих случаях это работает только для аннотаций @Value
. Если я попробую на @RequestMapping
, у меня всегда будет один путь.
Edit2: я могу сделать это, где --
- это просто случайная строка, которая не является допустимым путем, но это очень уродливо:
@RequestMapping(
"${some.path.property[0]:--}",
"${some.path.property[1]:--}",
"${some.path.property[2]:--}",
"${some.path.property[3]:--}",
"${some.path.property[4]:--}",
"${some.path.property[5]:--}",
"${some.path.property[6]:--}",
"${some.path.property[7]:--}",
"${some.path.property[8]:--}",
"${some.path.property[9]:--}"
)