近期的项目里在做消息的模块,负责系统内容的各种消息。有些消息的格式是固定的,每次改变的只是用户名等固定的几个字段。为了方便的维护这些消息,我们系统采用消息模板来实现。
例如:“尊敬的 #username# 您好,您购买的《#bookname#》交易成功!”
我们只要维护这个模板即可。那么发消息时,怎么将消息替换成相应的字段呢?对于不同的模板,有多个不同的参数该怎么办?
和消息相关的表有两张,一张是消息类型,一张是消息记录。
首先,我们需要从消息类型表查找到消息的模板,比如购买消息的模板:“尊敬的 #username# 您好,您购买的《#bookname#》交易成功!”
接着,我们可以根据传入的参数对变量进行替换,这里用map存放参数.
controller代码:
//参数1.消息模板名称
String messageTypeName="购买";
//参数2.要传入的字段
Map<String,String> map = new HashMap<String,String>();
map.put("username", "张三");
map.put("coursename", "JSP应用开发与实践");
//参数3.接收消息的id
String receiveMessageId="UWUi4B6Z93h1nr4NiM19k4";
//参数4.发送消息的id
String sendMessageId="UWUi4B6Z93h1nr4NiM19k4";
<span style="white-space:pre"> </span>//方法调用
<span style="white-space:pre"> </span>messageRecordBean.saveMessageRecord(messageTypeName, map, receiveMessageId, sendMessageId);
service实现:
//获取模板内容【查询方法略】
String messageTemplate=messageType.getMessageTemplate();
//获取map集合中的所有键,存入到Set集合中,
Set<Map.Entry<String,String>> entry = map.entrySet();
//通过迭代器取出map中的键值关系
Iterator<Map.Entry<String,String>> it = entry.iterator();
while (it.hasNext())
{
//将键值关系取出存入Map.Entry这个映射关系集合接口中
Map.Entry<String,String> me = it.next();
//获取键值,进行替换
messageTemplate=messageTemplate.replaceAll("#"+me.getKey()+"#", me.getValue());
}
//3.添加到消息实体
MessageRecord messageRecord=new MessageRecord();
messageRecord.setMessageRecordContent(messageTemplate);
messageRecord.setMessageTypeId(messageType.getId());
messageRecord.setReceiveMessageId(receiveMessageId);
messageRecord.setSendMessageId(sendMessageId);
messageRecord.setIsRead(0);
//成功返回true,否则返回false
try {
messageRecordEao.saveGeneric(messageRecord);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
主要的实现思路:使用map存放变量值,使用迭代器将模板中的变量替换为对应的map值。然后将获取的值保存到消息记录里。
业务虽然不是很难,但是通过自己的思考一步一步把它实现,心里特别的开心!