自定义故障触发条件之Spring Expression Language(SpEL)多变量表达式执行例子

本文深入探讨Spring Expression Language(SpEL)在处理复杂用户自定义故障触发条件的应用。通过实例展示如何使用SpEL解析多变量输入的表达式,解决物联网项目中动态条件判断难题,对新手工程师尤其有益。

物联网项目中需要处理用户自定义的故障触发条件,表达式可能千奇百怪,这就需要用到SpEL来处理用户输入的表达式了,网上的例子都是单个变量的赋值,对于实际的业务没有任何意义。我这里的例子是多个变量的输入的表达式。希望对新手同学有用。

 

	public void testAAA(){
		ExpressionParser parser = new SpelExpressionParser();
		EvaluationContext context = new StandardEvaluationContext();
		context.setVariable("A", "haha");


		String result1 = parser.parseExpression("#A").getValue(context, String.class);//haha
		String result2 = parser.parseExpression("{#A}").getValue(context, String.class);//haha
		try {//此行代码异常
			String result3 = parser.parseExpression("#{#V1}").getValue(context, String.class);
		}
		catch (Exception e) {
			e.printStackTrace();//Unexpected token. Expected 'identifier' but was 'lcurly({)'
		}


		LOG.info("{},{}",result1,result2);
	}
	public void testBBB()
	{
		ExpressionParser parser = new SpelExpressionParser();
		StandardEvaluationContext evContext = new StandardEvaluationContext();

		evContext.setVariable("A", 5);
		evContext.setVariable("B", 2);
		String expressionTemplate1 = "#{#A}+#{#B}< 2";
		String expressionTemplate2 = "#{#A}+#{#B}> 2";


		String result1 = parser.parseExpression(expressionTemplate1, new TemplateParserContext()).getValue(evContext,String.class);
		String result2 = parser.parseExpression(expressionTemplate2, new TemplateParserContext()).getValue(evContext,String.class);

		//下面这两行代码会报异常, 只能获取表达式字符串,没法继续执行表达式
		try {
			String result3 = parser.parseExpression(expressionTemplate1, new TemplateParserContext()).getValue(evContext,boolean.class).toString();
			String result4 = parser.parseExpression(expressionTemplate2, new TemplateParserContext()).getValue(evContext,boolean.class).toString();

		}
		catch (Exception e) {
			e.printStackTrace();//can not convert from java.lang.String to boolean
		}

		String value1 = parser.parseExpression(result1).getValue().toString();//false
		String value2 = parser.parseExpression(result2).getValue().toString();//true

		boolean value3 = parser.parseExpression(result1).getValue(boolean.class);//false
		boolean value4 = parser.parseExpression(result2).getValue(boolean.class);//true

		LOG.info("{},{}", result1,value1);
		LOG.info("{},{}", result2,value2);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

langeldep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值