@GetMapping с параметрами массива application.yml - PullRequest
0 голосов
/ 16 ноября 2018

Я разработал этот @ GetMapping RestController и все отлично работает

@GetMapping(path = {"foo", "bar"})
public ResponseEntity<String> foobar() {
    return ResponseEntity.ok("foobar");
}

Теперь я хочу экспортировать значения внутри массива пути, используя мой файл application.yml , поэтому я написал

url:
  - foo
  - bar

и я изменил свой код, чтобы использовать его, но он не работает в этом двух разных отношениях

@GetMapping(path = "${url}")
public ResponseEntity<String> foobar() {
    return ResponseEntity.ok("foobar");
}

@GetMapping(path = {"${url}"})
public ResponseEntity<String> foobar() {
    return ResponseEntity.ok("foobar");
}

Я не понимаю, правильно ли отформатированы свойства приложения или мне нужно использовать SpEL (https://docs.spring.io/spring/docs/3.0.x/reference/expressions.html.

Я также хочу, чтобы код был динамическим в соответствии со свойствами application.yml, поэтому, если значения url увеличиваются или уменьшаются, код все равно должен работать.

Я использую Springboot 1.5.13

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Вы не можете привязать список YAML к массиву или списку здесь. Для получения дополнительной информации см .: @ Value и @ConfigurationProperties ведут себя по-разному при привязке к массивам

Однако этого можно достичь, указав регулярное выражение в файле yml, например:

url: '{var:foo|bar}'

И тогда вы можете использовать его прямо в вашем контроллере:

@GetMapping(path = "${url}")
public ResponseEntity<String> foobar() {
    return ResponseEntity.ok("foobar");
}
0 голосов
/ 16 ноября 2018

Вы можете использовать в вашем контроллере

@GetMapping(path = "${url[0]}")
public ResponseEntity<String> foobar() {
    return ResponseEntity.ok("foobar");
}

@GetMapping(path = {"${url[1]}"})
public ResponseEntity<String> foobar() {
    return ResponseEntity.ok("foobar");
}

Или вы можете сделать так:

@GetMapping(path = {"${url[0]}","${url[1]}"})
public ResponseEntity<String> foobar() {
    return ResponseEntity.ok("foobar");
}

Я думаю, что это полезно

...