I have developed this @GetMapping RestController and all works fine
@GetMapping(path = {"foo", "bar"})
public ResponseEntity<String> foobar() {
return ResponseEntity.ok("foobar");
}
now I want externalize the values inside the path array using my application.yml file,so I writed
url:
- foo
- bar
and I modified my code in order to use it, but it doesn't work in this two different ways
@GetMapping(path = "${url}")
public ResponseEntity<String> foobar() {
return ResponseEntity.ok("foobar");
}
@GetMapping(path = {"${url}"})
public ResponseEntity<String> foobar() {
return ResponseEntity.ok("foobar");
}
I don't understand if the application properties are not correctly formatted or I need to use the SpEL (https://docs.spring.io/spring/docs/3.0.x/reference/expressions.html.
I also want that the code is dynamic according to the application.yml properties, so if the url values increase or decrease the code must still work.
I'm using Springboot 1.5.13
You can't bind YAML
list to array or list here. For more information see: @Value and @ConfigurationProperties behave differently when binding to arrays
However, you can achieve this by specifying regular expression in yml file like:
url: '{var:foo|bar}'
And then you can use it directly in your controller:
@GetMapping(path = "${url}")
public ResponseEntity<String> foobar() {
return ResponseEntity.ok("foobar");
}
You can use in your controller
@GetMapping(path = "${url[0]}")
public ResponseEntity<String> foobar() {
return ResponseEntity.ok("foobar");
}
@GetMapping(path = {"${url[1]}"})
public ResponseEntity<String> foobar() {
return ResponseEntity.ok("foobar");
}
Or you can do in this way:
@GetMapping(path = {"${url[0]}","${url[1]}"})
public ResponseEntity<String> foobar() {
return ResponseEntity.ok("foobar");
}
I think this is helpful
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With