下面列出了怎么用org.springframework.context.expression.MapAccessor的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public String evaluateTemplate(String expressionTemplate, Map<String, Object> evaluationContext) {
Optional.ofNullable(expressionTemplate)
.filter(template -> !template.isEmpty())
.orElseThrow(() -> new IllegalArgumentException("Expression template cannot be null or empty"));
Optional.ofNullable(evaluationContext)
.orElseThrow(() -> new IllegalArgumentException("Evaluation context cannot be null"));
Expression expression = new SpelExpressionParser().parseExpression(expressionTemplate
,new TemplateParserContext("@{","}"));
StandardEvaluationContext standardEvaluationContext = new StandardEvaluationContext();
try {
standardEvaluationContext.registerFunction("urlEncode",
Functions.class.getDeclaredMethod("urlEncode", new Class[] {String.class}));
} catch (NoSuchMethodException e) {
throw new EvaluationException("Fail to register function to evaluation context", e);
}
standardEvaluationContext.addPropertyAccessor(new MapAccessor());
standardEvaluationContext.setVariables(evaluationContext);
return expression.getValue(standardEvaluationContext,String.class);
}
@Override
public boolean evaluateConditional(String conditionalExpression, Map<String, Object> evaluationContext) {
Optional.ofNullable(conditionalExpression)
.filter(template -> !template.isEmpty())
.orElseThrow(() -> new IllegalArgumentException("Conditional expression cannot be null or empty"));
Optional.ofNullable(evaluationContext)
.orElseThrow(() -> new IllegalArgumentException("Evaluation context cannot be null"));
Expression expression = new SpelExpressionParser().parseExpression(conditionalExpression);
StandardEvaluationContext standardEvaluationContext = new StandardEvaluationContext();
standardEvaluationContext.addPropertyAccessor(new MapAccessor());
standardEvaluationContext.setVariables(evaluationContext);
return expression.getValue(standardEvaluationContext,Boolean.class);
}
/**
* 创建SpEL执行上下文
*
* @param rootObject
* SpEL表达式根对象
* @param context
* Beetl上下文对象
* @return SpEL表达式执行上下文
*/
private EvaluationContext createEvaluationContext(Object rootObject, Context beetlContext) {
StandardEvaluationContext context = new StandardEvaluationContext(rootObject);
// 允许使用#context访问Beetl上下文
context.setVariable("context", beetlContext);
// 允许使用#global访问Beetl上下文的全局变量
context.setVariable("global", beetlContext.globalVar);
// 注册WebRender定义的全局变量
context.setVariable("ctxPath", beetlContext.getGlobal("ctxPath"));
context.setVariable("servlet", beetlContext.getGlobal("servlet"));
context.setVariable("parameter", beetlContext.getGlobal("parameter"));
context.setVariable("request", beetlContext.getGlobal("request"));
context.setVariable("session", beetlContext.getGlobal("session"));
// 允许使用属性格式访问Map
context.addPropertyAccessor(new MapAccessor());
// 允许访问Spring容器Bean
context.setBeanResolver(new BeanFactoryResolver(applicationContext));
return context;
}
private EvaluationContext createEvaluationContext(PageContext pageContext) {
StandardEvaluationContext context = new StandardEvaluationContext();
context.addPropertyAccessor(new JspPropertyAccessor(pageContext));
context.addPropertyAccessor(new MapAccessor());
context.addPropertyAccessor(new EnvironmentAccessor());
context.setBeanResolver(new BeanFactoryResolver(getRequestContext().getWebApplicationContext()));
ConversionService conversionService = getConversionService(pageContext);
if (conversionService != null) {
context.setTypeConverter(new StandardTypeConverter(conversionService));
}
return context;
}
@Nullable
protected String getDescription(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return description.getValue(context, String.class);
}
@Nullable
protected String getText(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return message.getValue(context, String.class);
}
@Nullable
protected String getMessage(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return description.getValue(context, String.class);
}
@Nullable
protected String getText(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return message.getValue(context, String.class);
}
@Nullable
protected String getText(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return message.getValue(context, String.class);
}
@Nullable
protected String createContent(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return message.getValue(context, String.class);
}
@Nullable
protected String getMessage(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return description.getValue(context, String.class);
}
private EvaluationContext createEvaluationContext(PageContext pageContext) {
StandardEvaluationContext context = new StandardEvaluationContext();
context.addPropertyAccessor(new JspPropertyAccessor(pageContext));
context.addPropertyAccessor(new MapAccessor());
context.addPropertyAccessor(new EnvironmentAccessor());
context.setBeanResolver(new BeanFactoryResolver(getRequestContext().getWebApplicationContext()));
ConversionService conversionService = getConversionService(pageContext);
if (conversionService != null) {
context.setTypeConverter(new StandardTypeConverter(conversionService));
}
return context;
}
@Override
public Object evaluate(final Map<String, Object> context) {
if (context == null || expression == null) {
return null;
}
StandardEvaluationContext sec = new StandardEvaluationContext(context);
sec.addPropertyAccessor(new MapAccessor());
return expression.getValue(sec);
}
@Test
public void projection() throws Exception {
StandardEvaluationContext context = new StandardEvaluationContext();
context.setTypeLocator(new CommonTypeLocator());
context.addPropertyAccessor(new MapAccessor());
context.setVariable("content",
"{\"blocks\":[{\"data\":{},\"depth\":0,\"entityRanges\":[],\"inlineStyleRanges\":[],\"key\":\"ummxd\",\"text\":\"Test\",\"type\":\"unstyled\"}],\"entityMap\":{}}");
String value = parser
.parseExpression("T(SyncUtil).fromJson(#content,T(Map))['blocks'].![text]")
.getValue(context, String.class);
Assert.assertEquals(value, "Test");
}
private EvaluationContext createEvaluationContext(PageContext pageContext) {
StandardEvaluationContext context = new StandardEvaluationContext();
context.addPropertyAccessor(new JspPropertyAccessor(pageContext));
context.addPropertyAccessor(new MapAccessor());
context.addPropertyAccessor(new EnvironmentAccessor());
context.setBeanResolver(new BeanFactoryResolver(getRequestContext().getWebApplicationContext()));
ConversionService conversionService = getConversionService(pageContext);
if (conversionService != null) {
context.setTypeConverter(new StandardTypeConverter(conversionService));
}
return context;
}
private EvaluationContext createEvaluationContext(PageContext pageContext) {
StandardEvaluationContext context = new StandardEvaluationContext();
context.addPropertyAccessor(new JspPropertyAccessor(pageContext));
context.addPropertyAccessor(new MapAccessor());
context.addPropertyAccessor(new EnvironmentAccessor());
context.setBeanResolver(new BeanFactoryResolver(getRequestContext().getWebApplicationContext()));
ConversionService conversionService = getConversionService(pageContext);
if (conversionService != null) {
context.setTypeConverter(new StandardTypeConverter(conversionService));
}
return context;
}
@Override
public MailMessage create(MailTemplate mailTemplate, MailSource source) {
MailMessageImpl.Builder b = MailMessageImpl.builder();
final StandardEvaluationContext ctx = new StandardEvaluationContext(source.getVariables());
ctx.addPropertyAccessor(new MapAccessor());
UnaryOperator<Object> processor = (o) -> MailTemplateUtils.process((s) -> evaluate(ctx, s), o);
b.setHead(MailHeadImpl.builder().from(mailTemplate.getHeadSource(), processor).build());
MailPartTemplate bs = mailTemplate.getBodySource();
String bodyText = (String) evaluate(ctx, bs.getData());
b.setBody(new MailTextBody(bodyText, bs.getMime()));
return b.build();
}
@Nullable
protected String getDescription(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return description.getValue(context, String.class);
}
@Nullable
protected String getText(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return message.getValue(context, String.class);
}
@Nullable
protected String getMessage(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return description.getValue(context, String.class);
}
@Nullable
protected String getText(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return message.getValue(context, String.class);
}
@Nullable
protected String getText(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return message.getValue(context, String.class);
}
@Nullable
protected String createContent(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return message.getValue(context, String.class);
}
@Nullable
protected String getMessage(InstanceEvent event, Instance instance) {
Map<String, Object> root = new HashMap<>();
root.put("event", event);
root.put("instance", instance);
root.put("lastStatus", getLastStatus(event.getInstance()));
StandardEvaluationContext context = new StandardEvaluationContext(root);
context.addPropertyAccessor(new MapAccessor());
return description.getValue(context, String.class);
}
public RoutingFunction(FunctionCatalog functionCatalog, FunctionInspector functionInspector, FunctionProperties functionProperties) {
this.functionCatalog = functionCatalog;
this.functionProperties = functionProperties;
this.functionInspector = functionInspector;
this.evalContext.addPropertyAccessor(new MapAccessor());
}
/**
* Creates a new instance with {@link StandardEvaluationContext} including
* {@link org.springframework.expression.spel.support.ReflectivePropertyAccessor ReflectivePropertyAccessor}
* and {@link MapAccessor}.
*/
public SpelMessageInterpolator() {
StandardEvaluationContext ctx = new StandardEvaluationContext();
ctx.addPropertyAccessor(new MapAccessor());
this.evalContext = ctx;
}