【发布时间】:2016-01-26 23:26:26
【问题描述】:
我想从 yaml 文件 (application.yml) 中读取主机列表,该文件如下所示:
cors:
hosts:
allow:
- http://foo1/
- http://foo2/
- http://foo3/
(示例 1)
我使用的类定义了这样的值:
@Value("${cors.hosts.allow}")
List<String> allowedHosts;
但由于 Spring 抱怨,读取失败:
java.lang.IllegalArgumentException:无法解析占位符 字符串值“${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: org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanPropertyBindingResult: 1 错误字段“允许”上的对象“cors.hosts”中的字段错误:被拒绝 值[空];代码 [NotNull.cors.hosts.allow,NotNull.allow,NotNull]; 论据 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [cors.hosts.allow,allow];参数 ts [];默认消息 [允许]];
我搜索了其他方法来配置我的 CORS 主机,并找到了这个 Spring Boot issue,但由于这还没有完成,我不能将它用作解决方案。 所有这些都是通过 Spring Boot 1.3 RC1 完成的
【问题讨论】:
-
似乎是一个未解决的 Spring 错误 (SPR-11759)。
-
@BohuslavBurghardt 我试图切换到
@ConfigurationProperties,不幸的是这也不起作用。
标签: spring configuration spring-boot yaml snakeyaml