将null或空字符串作为属性的默认值注入

15

如果属性没有被指定,是否可以将 null 或空字符串作为在 Spring 文件中使用的默认值进行注入?目前我最好的解决方案是

<constructor-arg index="1" value="@{data.url:&quot;&quot;}"/>

在代码中解析为""


1
我认为只需要 <constructor-arg value=""/> 就可以了。如果你需要索引,你可以添加它。也许我没有理解你的问题? - Ivaylo Strandjev
<constructor-arg value=""/>将始终发送一个空字符串。我只对关联的属性文件中未指定空字符串感兴趣。请参见https://dev59.com/InE85IYBdhLWcg3w_I38#2534949。 - qwerty
5个回答

15

空值合并运算符对我很有效...

@Value("${http.proxyHost?:}")
public String proxyHost = null;

当我这样做时,Eclipse Oxygen会生成一个表达式预期的警告。不过它确实可以工作。我猜这是一个Eclipse问题。 - David Bradley

13

你是否尝试过使用SpEL?或许可以像这样:

<constructor-arg index="1" value="#{'${data.url}'==null?'':'${data.url}'}"/>

更新

我刚刚想起来有一种更简单的方法(如这里所描述)。尝试以下方法:

<constructor-arg index="1" value="${data.url:''}"/>

在Spring 3.0.7中,我使用"#{ '${data.url}' != 'null' ? '${data.url}' : '' }",因为仅使用!= null无法正常工作。 - Sergey Ponomarev

13

如果您在源代码中使用注释,则这将起到作用:

@Value("${data.url:#{null}}")
private String dataUrl;

0
  1. 如果你想将值设置为 null
@Value("${data.url:#{null}}")
private String dataUrl;
  1. 如果您想将值设置为空字符串
@Value("${data.url:}")
private String dataUrl;

0

如果要将空字符串注入为默认值,可以使用@Value注释和defaultValue属性

@Value("${data.url:}")
private String dataUrl;

你也可以像这样定义属性:

@Value("${data.url:#{null}}")
private String dataUrl;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接