Java @使用#{systemEnvironment}的条件表达式
我正在尝试使用以下环境变量设置一个Java @使用#{systemEnvironment}的条件表达式,java,spring,spring-boot,Java,Spring,Spring Boot,我正在尝试使用以下环境变量设置一个@ConditionalExpression: @ConditionalOnExpression("#{systemEnvironment['PUBLIC']?:'false'} != true") 我可以看到这在以下代码中进行了评估: private Boolean evaluateExpression(ConfigurableListableBeanFactory beanFactory,字符串表达式){ BeanExpressionR
@ConditionalExpression
:
@ConditionalOnExpression("#{systemEnvironment['PUBLIC']?:'false'} != true")
我可以看到这在以下代码中进行了评估:
private Boolean evaluateExpression(ConfigurableListableBeanFactory beanFactory,字符串表达式){
BeanExpressionResolver解析器=beanFactory.getBeanExpressionResolver();
if(解析器==null){
resolver=新标准BeanPressionResolver();
}
BeanExpressionContext表达式上下文=新的BeanExpressionContext(beanFactory,null);
Object result=resolver.evaluate(表达式,表达式上下文);
返回(结果!=null&(布尔)结果);
}
问题是,resolver.evaluate(expression,expressionContext)代码>返回false!=true
其中该值应为布尔值
:
返回(结果!=null&&(布尔)结果);
因此,对于ClassCastException
,这总是失败的
我还尝试着用不同的引用方式,并用${…}
将其包装成一个整体,但结果总是一样的
问题是:我的条件表达式有什么问题?一个解决方案可能是这个表达式:
@ConditionalOnExpression("#{!(systemEnvironment['PUBLIC']?:'false').equals('true')}")
需要补充的是,如果这个问题不是出于调查目的,而是为了找到改进真实(类似于生产)代码的方法,我真的建议您:
@ConditionalOnExpression
替换为@ConditionalOnProperty
(可选使用matchIfMissing
参数)李>
systemProperties
/systemEnvironment