SpringBoot(java)动态短信模板的设计

时间:2025-02-15 10:20:20

 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