场景:发送客户消息,需要将一些变量替换为对象中的数据;
/**
* 替换对象中的变量
* @param message 模板消息,例:你好#{nickName}
* @param obj java对象
* @return
*/
private String getMessage(String message, Object obj) {
if (obj == null || StringUtil.isEmpty(message)) {
return null;
}
JSONObject jsonObject;
if(obj instanceof JSONObject){
jsonObject = (JSONObject)obj;
} else {
jsonObject = (JSONObject) JSON.toJSON(obj);
}
// 正则获取边框,如果没有值这赋空值,防止el表达式获取异常
String pat = "(?<=\\#\\{)(.+?)(?=\\})";
Pattern pattern = Pattern.compile(pat);
Matcher m = pattern.matcher(message);
while (m.find()) {
int i = 1;
String group = m.group(i);
jsonObject.putIfAbsent(group, "");
i++;
}
Expression expression = new SpelExpressionParser().parseExpression(message, ParserContext.TEMPLATE_EXPRESSION);
StandardEvaluationContext context = new StandardEvaluationContext(jsonObject);
context.addPropertyAccessor(new MapPropertyAccessor());
String content = expression.getValue(context).toString();
return content;
}