首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spring Boot中定义application.yml中的缺省空值

如何在Spring Boot中定义application.yml中的缺省空值
EN

Stack Overflow用户
提问于 2015-12-02 19:06:22
回答 3查看 21.2K关注 0票数 12

我尝试在SpringBoot版本为1.3.0.RELEASE的application.yml中将缺省值定义为null值。

代码语言:javascript
复制
-- application.yml --
test.foo: ${test.bar:#{null}}

但它不起作用。

如果未定义test.bar的值,则将test.foo设置为null (默认值)

我的依赖中已经有了spring-el。我不想使用PropertyPlaceholderConfigurer.setNullValue

它似乎可以在@Value中工作,但不能在application.yml中工作(参见http://farenda.com/spring/spring-inject-null-value/)

这是一个bug,还是yaml不是为此而设计的?我尝试了http://yaml.org/type/null.html中的所有值,但也不起作用

谢谢

EN

回答 3

Stack Overflow用户

发布于 2017-10-05 22:09:47

@Value

从文档中我们可以看到:

一个常见的用例是使用"#{systemProperties.myProp}“样式表达式分配默认字段值。

这里实际上是三个阶段:

通过注释元数据获取属性值-- AutowiredAnnotationBeanPostProcessor

  • Spring解释属性值-- ExpressionParser

-- Environmen

  • Spring
  • Spring获取注释字符串--获取属性值

用例

如果我们像您所描述的那样在application.yml中定义一个test.foo

代码语言:javascript
复制
-- application.yml --
test.foo: ${test.bar:#{null}}

然后,我们通过@Value在代码中引用它,它按照您所说的那样工作。

代码语言:javascript
复制
@Autowired
public A(@Value("test.foo") Object a) {}

但是如果我们直接从environment获取,它将是纯字符串:

代码语言:javascript
复制
env.getProperty("test.foo")

更多

所以,它是不是工作取决于你是如何使用它的。在获得更多信息之前,我无法提供更多帮助。希望下面的相关帖子能有所帮助。

  • Spring EL tutorial
  • Spring Boot: customize environment
票数 3
EN

Stack Overflow用户

发布于 2020-04-08 17:45:51

尝试使用:

代码语言:javascript
复制
-- application.yml --
test.foo: ${test.bar:}
票数 0
EN

Stack Overflow用户

发布于 2020-05-14 20:17:27

你需要这样设置它:

代码语言:javascript
复制
test:
  foo: ${test.bar:'#{null}'}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34041197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档