fun.bigtable.kraken.util.SpelUtils Maven / Gradle / Ivy
package fun.bigtable.kraken.util;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.expression.MethodBasedEvaluationContext;
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.lang.reflect.Method;
import java.util.Objects;
/**
* spel 处理工具类
*
*/
public class SpelUtils {
public static String parse(String spel, Method method, Object[] args) {
// 获取被拦截方法参数名列表(使用Spring支持类库)
StandardReflectionParameterNameDiscoverer u = new StandardReflectionParameterNameDiscoverer();
String[] paraNameArr = u.getParameterNames(method);
// 使用SPEL进行key的解析
ExpressionParser parser = new SpelExpressionParser();
// SPEL上下文
StandardEvaluationContext context = new StandardEvaluationContext();
// 把方法参数放入SPEL上下文中
for (int i = 0; i < Objects.requireNonNull(paraNameArr).length; i++) {
context.setVariable(paraNameArr[i], args[i]);
}
return parser.parseExpression(spel).getValue(context, String.class);
}
/**
* 支持 #p0 参数索引的表达式解析
*
* @param rootObject 根对象,method 所在的对象
* @param spel 表达式
* @param method 目标方法
* @param args 方法入参
* @return 解析后的字符串
*/
public static String parse(Object rootObject, String spel, Method method, Object[] args) {
if (StringUtils.isEmpty(spel)){
return StringUtils.EMPTY;
}
// 获取被拦截方法参数名列表(使用Spring支持类库)
StandardReflectionParameterNameDiscoverer u = new StandardReflectionParameterNameDiscoverer();
String[] paraNameArr = u.getParameterNames(method);
// 使用SPEL进行key的解析
ExpressionParser parser = new SpelExpressionParser();
// SPEL上下文
StandardEvaluationContext context = new MethodBasedEvaluationContext(rootObject, method, args, u);
// 把方法参数放入SPEL上下文中
for (int i = 0; i < Objects.requireNonNull(paraNameArr).length; i++) {
context.setVariable(paraNameArr[i], args[i]);
}
return parser.parseExpression(spel).getValue(context, String.class);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy