概述
消息模板占位符的使用
一. 使用@占位符
说明:根据@占位符进去匹配占位
案例:“模板名称:@tplName@,发生了变更,变更描述:@tplName@的变更描述是:@descr@”;
1. 占位符解析
//解析占位符拼接消息模板
public String getContent(MsgType msgType, Map<String, String> messageAttrMap) {
//获取带占位符的消息模板
String result = messageTypeRepo.getByCode(msgType.name()).getContentTemplate();
//result = "模板名称:@tplName@,发生了变更,变更描述:@tplName@的变更描述是:@descr@";
Pattern pattern = Pattern.compile("@(.*?)@");
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
//占位符
String placeholder = matcher.group();
String key = placeholder.substring(1, placeholder.length() - 1);
if (messageAttrMap.containsKey(key)) {
String value = "null";
if (Objects.nonNull(messageAttrMap.get(key))) {
value = messageAttrMap.get(key).trim();
}
result = StringUtils.replaceAll(result, placeholder, value);
// System.out.println(result);
}
}
return result;
}
2. 占位符参数的赋值
@ApiModelProperty(value = "消息模板类型",required = true)
private MsgType msgType;
@ApiModelProperty(value = "消息内容的属性",required = true)
private Map<String, Object> msgAttrMap;//key可能有重复的属性字段,需要替换,value则为替换的字段的值,用于消息模板的占位
二 使用$占位符
public String getMsgContent(Map<String, Object> varMap,String msgTemplate) {
StandardELContext elContext = new StandardELContext(factory);
for(Map.Entry<String,Object> en:varMap.entrySet()){
if(en.getValue()!=null){
elContext.getVariableMapper()
.setVariable(en.getKey(),factory.createValueExpression(en.getValue(),
en.getValue().getClass()));
}
}
// String pl = "${name}";
ValueExpression e = factory.createValueExpression(elContext, msgTemplate, String.class);
return String.valueOf(e.getValue(elContext));
}
最后
以上就是无情蛋挞为你收集整理的消息模板占位符的使用的全部内容,希望文章能够帮你解决消息模板占位符的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复