我想从一个yaml文件(application.yml)中读取主机列表,该文件看起来像这样:
cors:
hosts:
allow:
- http://foo1/
- http://foo2/
- http://foo3/
(例1)
我使用的类定义了如下值:
@Value("${cors.hosts.allow}")
List<String> allowedHosts;
但是阅读失败了,因为Spring抱怨说:
异常错误:无法解析字符串值“${cors. hosts.allow}”中的占位符“cors. hosts.allow”
当我像这样修改文件时,属性可以被读取,但它自然不包含列表,而只包含一个条目:
cors:
hosts:
allow: http://foo1, http://foo2, http://foo3
(我知道我可以将这些值作为一行读取,然后按","
拆分它们,但我还不想找到解决方法)
这也不起作用(尽管我认为根据snakeyamls docs,这应该是有效的):
cors:
hosts:
allow: !!seq [ "http://foo1", "http://foo2" ]
(跳过!!seq
而仅使用[
/]
也是失败的)
我阅读了建议here,其中涉及到使用@ConfigurationProperties
,并将该示例转换为Java,并将其与示例1中的yaml文件一起使用:
@Configuration
@EnableWebMvc
@ConfigurationProperties(prefix = "cors.hosts")
public class CorsConfiguration extends WebMvcConfigurerAdapter {
@NotNull
public List<String> allow;
...
当我运行此程序时,我收到以下投诉:
org.springframework.validation.BindException:绑定结果:对象'cors.hosts'中字段'allow'上的字段错误:拒绝的值[null];代码[非空.cors.主机.允许,非空.允许,非空];可解析的消息源:代码[cors.主机.允许,允许];论证ts [];默认消息[允许]];
我搜索了其他方法来配置我的CORS主机,并找到了这个Spring Boot issue,但由于它还没有完成,我不能将其作为一个解决方案。
5条答案
按热度按时间niwlg2el1#
很简单,答案就在这份文档和这份文档中
所以,你有一个像这样的yaml:
然后,首先绑定数据
然后在另一个组件中
你已经完成了!
h7appiyu2#
在application.yml中使用逗号分隔值
用于访问的Java代码
我试过了,成功了;)
yzuktlbb3#
我已经能够从属性列表中读取如下方式-
属性-
读取属性-
gk7wooem4#
我遇到了同样的问题,但解决了,给予你我的解决方案
在Sping Boot 2.1.6.RELEASE版本中获得成功
ev7lccsx5#
如下所示,以yml声明值列表
It says Could not resolve placeholder 'fruits' in value "${fruits}"
注入Java代码
至少在spring 2.7.4版本中,spring-boot无法识别基于Yml的列表语法
It says Could not resolve placeholder 'fruits' in value "${fruits}"
个