1、设计思想
通过一定的格式(如:%s#%s),通过查找对应的属性,用对应的值替换。短信模板可以动态读取类及相关的属性在前端的页面上配置、
2、静态类示例
可以使用静态,也可以使用数据查询返回的实体对象的值
import ;
import ;
import ;
@Data
public class SmsTagTemplate {
/**
* 当前时间
*/
private LocalDateTime localDateTime = ();
/**
* 当前日期时间 yyyy-MM-dd HH:mm:ss
*/
private String currentDateTime = (("yyyy-MM-dd HH:mm:ss"));
/**
* 当前日期 yyyy-MM-dd
*/
private String currentDate = (("yyyy-MM-dd"));
/**
* 当前时间 HH:mm:ss
*/
private String currentTime = (("HH:mm:ss"));
}
3、短信模板示例
SmsTagTemplate 类名,为了避免类名一致,可以使用 包名+类名,示例只是使用类名加上属性名
尊敬的客户,恭喜您注册成功,成为某某系统的VIP用户。SmsTagTemplate#currentDateTime
4、核心代码
private static final String TEMP_FORMAT = "%s#%s";
/**
* 获取短信模板
*
* @param objects 值替换的对象
* @param smsTemplate 短信模板
* @return 返回 转换之后的短信内容
*/
public static String matchSmsTemplate(List<Object> objects, String smsTemplate) {
if ((objects)) {
return smsTemplate;
}
for (Object specialTemplate : objects) {
smsTemplate = matchSmsTemplate(specialTemplate, smsTemplate);
}
return smsTemplate;
}
/**
* 获取短信模板
*
* @param object 值替换的对象
* @param smsTemplate 短信模板
* @return 返回 转换之后的短信内容
*/
private static String matchSmsTemplate(Object object, String smsTemplate) {
Field[] fields = ().getDeclaredFields();
if (fields == null) {
return smsTemplate;
}
for (Field field : fields) {
String fieldName = (TEMP_FORMAT, ().getSimpleName(), ());
boolean matches = (fieldName).matcher(smsTemplate).find();
if (!matches) {
continue;
}
String value;
Object val;
(true);
try {
val = (object);
} catch (IllegalAccessException e) {
continue;
}
value = val == null ? "" : (val);
smsTemplate = (fieldName, value);
}
return smsTemplate;
}
5、返回结果
尊敬的客户,恭喜您注册成功,成为某某系统的VIP用户。2021-03-12 10:00:00