java – 如何获取包含占位符的属性的原始值?

我试图在我的.properties文件中定义以下属性:

personExpression=${person.surname}

然后由config类读取:

@Configuration
public class TemplateConfig {
    @Autowired
    private Environment environment;

    public String getPersonExpression() {
        return environment.getProperty("personExpression");
    }
}

但是这给出了例外:

java.lang.IllegalArgumentException: Could not resolve placeholder 'person.surname' in string value "${person.surname}"

有没有办法让getPersonExpression()返回字符串文字${person.surname}而不试图解决它?

最佳答案 为了实现这一点,需要一些非常不直观的语法.

您基本上必须将表达式拆分为两部分,并将整个事物包装在父SpEL表达式中以加入它们.

如果您将属性值更改为以下值,则应该可以:

personExpression=#{'$' + '{person.surname}'}

这是有效的,因为你要从{person.surname}拆分$字符,所以SpEL不会尝试将它作为表达式进行评估,因为就它而言,你只是将两个字符串连接在一起.

点赞