我已经开发了 @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
答案 0 :(得分:3)
您无法将YAML
列表绑定到数组或此处的列表。有关更多信息,请参见:@Value and @ConfigurationProperties behave differently when binding to arrays
但是,您可以通过在yml文件中指定正则表达式来实现此目的,例如:
url: '{var:foo|bar}'
然后您可以直接在控制器中使用它:
@GetMapping(path = "${url}")
public ResponseEntity<String> foobar() {
return ResponseEntity.ok("foobar");
}
答案 1 :(得分:2)
您可以在控制器中使用
@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");
}
我认为这很有帮助